router: Refactor IPv6 ORPort function logic

Return early when there is no suitable IPv6 ORPort.
Show the address and port on error, using a convenience function.

Code simplification and refactoring.

Cleanup after 32588.
This commit is contained in:
teor
2020-01-08 17:34:37 +10:00
parent 861337fd6d
commit bac8bc0ff1
+10 -9
View File
@@ -1460,20 +1460,21 @@ router_get_advertised_ipv6_or_ap(const or_options_t *options,
return;
}
/* Like IPv4, if the relay is configured using the default
* authorities, disallow internal IPs. Otherwise, allow them. */
/* If the relay is configured using the default authorities, disallow
* internal IPs. Otherwise, allow them. For IPv4 ORPorts and DirPorts,
* this check is done in resolve_my_address(). See #33681. */
const int default_auth = using_default_dir_authorities(options);
if (! tor_addr_is_internal(addr, 0) || ! default_auth) {
tor_addr_copy(&ipv6_ap_out->addr, addr);
ipv6_ap_out->port = port;
} else {
char addrbuf[TOR_ADDR_BUF_LEN];
if (tor_addr_is_internal(addr, 0) && default_auth) {
log_warn(LD_CONFIG,
"Unable to use configured IPv6 address \"%s\" in a "
"Unable to use configured IPv6 ORPort \"%s\" in a "
"descriptor. Skipping it. "
"Try specifying a globally reachable address explicitly.",
tor_addr_to_str(addrbuf, addr, sizeof(addrbuf), 1));
fmt_addrport(addr, port));
return;
}
tor_addr_copy(&ipv6_ap_out->addr, addr);
ipv6_ap_out->port = port;
}
/** Return the port that we should advertise as our DirPort;