]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
relay: Look at the omit IPv6 flag when publishing
authorDavid Goulet <dgoulet@torproject.org>
Mon, 8 Feb 2021 16:51:45 +0000 (11:51 -0500)
committerDavid Goulet <dgoulet@torproject.org>
Mon, 8 Feb 2021 16:51:45 +0000 (11:51 -0500)
In two instances we must look at this flag:

1. When we build the descriptor so the IPv6 is NOT added to the descriptor in
   case we judge that we need to omit the address but still publish.

2. When we are deciding if the descriptor is publishable. This flags tells us
   that the IPv6 was not found reachable but we should still publish.

Fixes #40279

Signed-off-by: David Goulet <dgoulet@torproject.org>
changes/ticket40279 [new file with mode: 0644]
src/feature/relay/router.c

diff --git a/changes/ticket40279 b/changes/ticket40279
new file mode 100644 (file)
index 0000000..351db40
--- /dev/null
@@ -0,0 +1,4 @@
+  o Major bugfixes (IPv6, relay):
+    - Fix a bug that prevented a relay to publish its descriptor in the case of
+      an auto-discovered IPv6 that was found unreachable for which we always
+      publish if the IPv4 is correct. Fixes bug 40279; bugfix on 0.4.5.1-alpha.
index 4bc71eb486073a39750e21f50c6d4e1ec25b093e..0be3eec1dd3b7f28d555c11b66b0f1a2446ddad2 100644 (file)
@@ -138,6 +138,18 @@ static authority_cert_t *legacy_key_certificate = NULL;
  * used by tor-gencert to sign new signing keys and make new key
  * certificates. */
 
+/** Indicate if the IPv6 address should be omitted from the descriptor when
+ * publishing it. This can happen if the IPv4 is reachable but the
+ * auto-discovered IPv6 is not. We still publish the descriptor.
+ *
+ * Only relays should look at this and only for their descriptor.
+ *
+ * XXX: The real harder fix is to never put in the routerinfo_t a non
+ * reachable address and instead use the last resolved address cache to do
+ * reachability test or anything that has to do with what address tor thinks
+ * it has. */
+static bool omit_ipv6_on_publish = false;
+
 /** Return a readonly string with human readable description
  * of <b>err</b>.
  */
@@ -1396,7 +1408,11 @@ decide_if_publishable_server(void)
       return 0;
     }
   }
-  if (!router_orport_seems_reachable(options, AF_INET6)) {
+  /* We could be flagged to omit the IPv6 and if so, don't check for
+   * reachability on the IPv6. This can happen if the address was
+   * auto-discovered but turns out to be non reachable. */
+  if (!omit_ipv6_on_publish &&
+      !router_orport_seems_reachable(options, AF_INET6)) {
     // We have an ipv6 orport, and it doesn't seem reachable.
     if (!publish_even_when_ipv6_orport_unreachable) {
       return 0;
@@ -2085,7 +2101,8 @@ router_build_fresh_unsigned_routerinfo,(routerinfo_t **ri_out))
   ri->ipv4_dirport = routerconf_find_dir_port(options, 0);
 
   /* Optionally check for an IPv6. We still publish without one. */
-  if (relay_find_addr_to_publish(options, AF_INET6, RELAY_FIND_ADDR_NO_FLAG,
+  if (!omit_ipv6_on_publish &&
+      relay_find_addr_to_publish(options, AF_INET6, RELAY_FIND_ADDR_NO_FLAG,
                                  &ri->ipv6_addr)) {
     ri->ipv6_orport = routerconf_find_or_port(options, AF_INET6);
     router_check_descriptor_address_consistency(&ri->ipv6_addr);
@@ -2459,18 +2476,6 @@ router_new_consensus_params(const networkstatus_t *ns)
   publish_even_when_ipv6_orport_unreachable = ar || ar6;
 }
 
-/** Indicate if the IPv6 address should be omitted from the descriptor when
- * publishing it. This can happen if the IPv4 is reachable but the
- * auto-discovered IPv6 is not. We still publish the descriptor.
- *
- * Only relays should look at this and only for their descriptor.
- *
- * XXX: The real harder fix is to never put in the routerinfo_t a non
- * reachable address and instead use the last resolved address cache to do
- * reachability test or anything that has to do with what address tor thinks
- * it has. */
-static bool omit_ipv6_on_publish = false;
-
 /** Mark our descriptor out of data iff the IPv6 omit status flag is flipped
  * it changes from its previous value.
  *