summaryrefslogtreecommitdiff
path: root/src/feature
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2021-02-23 09:37:17 -0500
committerDavid Goulet <dgoulet@torproject.org>2021-02-23 09:49:45 -0500
commit39d0f69dfee86c4f8703094990d3169fb20614f3 (patch)
tree5b01dbd2a73e5a0f43586eeaa861f6263c893458 /src/feature
parentbc21ed32903459c53599ee03605e8d23bf42ffe9 (diff)
downloadtor-39d0f69dfee86c4f8703094990d3169fb20614f3.tar.gz
tor-39d0f69dfee86c4f8703094990d3169fb20614f3.zip
relay: Avoid a directory early fetch
The directory_fetches_from_authorities() is used to know if a client or relay should fetch data from an authority early in the boot process. We had a condition in that function that made a relay trigger that fetch if it didn't know its address (so we can learn it). However, when this is called, the address discovery has not been done yet so it would always return true for a relay. Furthermore, it would always trigger a log notice that the IPv4 couldn't be found which was inevitable because the address discovery process has not been done yet (done when building our first descriptor). It is also important to point out that starting in 0.4.5.1-alpha, asking an authority for an address is done during address discovery time using a one-hop circuit thus independent from the relay deciding to fetch or not documents from an authority. Small fix also is to reverse the "IPv(4|6)Only" flag in the notice so that if we can't find IPv6 it would output to use IPv4Only. Fixes #40300 Signed-off-by: David Goulet <dgoulet@torproject.org>
Diffstat (limited to 'src/feature')
-rw-r--r--src/feature/dirclient/dirclient_modes.c8
-rw-r--r--src/feature/relay/relay_find_addr.c15
-rw-r--r--src/feature/relay/relay_find_addr.h2
3 files changed, 2 insertions, 23 deletions
diff --git a/src/feature/dirclient/dirclient_modes.c b/src/feature/dirclient/dirclient_modes.c
index 62cdad6c36..db25196213 100644
--- a/src/feature/dirclient/dirclient_modes.c
+++ b/src/feature/dirclient/dirclient_modes.c
@@ -45,14 +45,6 @@ dirclient_fetches_from_authorities(const or_options_t *options)
return 1;
if (options->BridgeRelay == 1)
return 0;
- /* We don't know our IP address; ask an authority. IPv4 is still mandatory
- * to have thus if we don't have it, we ought to learn it from an authority
- * through the NETINFO cell or the HTTP header it sends us back.
- *
- * Note that at the moment, relay do a direct connection so no NETINFO cell
- * for now. */
- if (server_mode(options) && !relay_has_address_set(AF_INET))
- return 1;
refuseunknown = ! router_my_exit_policy_is_reject_star() &&
should_refuse_unknown_exits(options);
if (!dir_server_mode(options) && !refuseunknown)
diff --git a/src/feature/relay/relay_find_addr.c b/src/feature/relay/relay_find_addr.c
index 2a3f602438..c43885af51 100644
--- a/src/feature/relay/relay_find_addr.c
+++ b/src/feature/relay/relay_find_addr.c
@@ -162,7 +162,8 @@ relay_find_addr_to_publish, (const or_options_t *options, int family,
"explicit address or set Address.",
fmt_af_family(family),
routerconf_find_or_port(options, family),
- fmt_af_family(family));
+ (family == AF_INET) ? fmt_af_family(AF_INET6) :
+ fmt_af_family(AF_INET));
/* Not found. */
return false;
@@ -171,18 +172,6 @@ relay_find_addr_to_publish, (const or_options_t *options, int family,
return true;
}
-/** Return true iff this relay has an address set for the given family.
- *
- * This only checks the caches so it will not trigger a full discovery of the
- * address. */
-bool
-relay_has_address_set(int family)
-{
- tor_addr_t addr;
- return relay_find_addr_to_publish(get_options(), family,
- RELAY_FIND_ADDR_CACHE_ONLY, &addr);
-}
-
/** How often should we launch a circuit to an authority to be sure of getting
* a guess for our IP? */
#define DUMMY_DOWNLOAD_INTERVAL (20*60)
diff --git a/src/feature/relay/relay_find_addr.h b/src/feature/relay/relay_find_addr.h
index 34890cd34e..f049d1bd20 100644
--- a/src/feature/relay/relay_find_addr.h
+++ b/src/feature/relay/relay_find_addr.h
@@ -22,8 +22,6 @@ MOCK_DECL(bool, relay_find_addr_to_publish,
(const or_options_t *options, int family, int flags,
tor_addr_t *addr_out));
-bool relay_has_address_set(int family);
-
void relay_addr_learn_from_dirauth(void);
#ifdef RELAY_FIND_ADDR_PRIVATE