relay: Don't trigger an address discovery without an ORPort

We would before do an address discovery and then a lookup in the cache if not
found which is now simplified by calling relay_find_addr_to_publish() directly
which does all those combined.

Furthermore, by doing so, we won't trigger an address discovery every minute
if we have no ORPort configured for the family.

Fixes #40254

Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
David Goulet
2021-01-22 10:35:32 -05:00
committed by Nick Mathewson
parent b4220a09b7
commit 2e600019ea
2 changed files with 9 additions and 12 deletions
+4
View File
@@ -0,0 +1,4 @@
o Minor bugfixes (relay, configuration):
- Don't attempt to discover address (IPv4 or IPv6) if no ORPort for it can
be found in the configuration. Fixes bug 40254; bugfix on 0.4.5.1-alpha.
+5 -12
View File
@@ -2671,18 +2671,11 @@ check_descriptor_ipaddress_changed(time_t now)
previous = &my_ri->ipv6_addr;
}
/* Ignore returned value because we want to notice not only an address
* change but also if an address is lost (current == UNSPEC). */
bool found = find_my_address(get_options(), family, LOG_INFO, &current,
&method, &hostname);
if (!found) {
/* Address was possibly not found because it is simply not configured or
* discoverable. Fallback to our cache, which includes any suggestion
* sent by a trusted directory server. */
found = relay_find_addr_to_publish(get_options(), family,
RELAY_FIND_ADDR_CACHE_ONLY,
&current);
}
/* Attempt to discovery the publishable address for the family which will
* actively attempt to discover the address if we are configured with a
* port for the family. */
relay_find_addr_to_publish(get_options(), family, RELAY_FIND_ADDR_NO_FLAG,
&current);
/* The "current" address might be UNSPEC meaning it was not discovered nor
* found in our current cache. If we had an address before and we have