[tor-commits] [tor/maint-0.3.3] Make extend_info_from_node() more picky about node contents

nickm at torproject.org nickm at torproject.org
Tue Mar 27 11:05:20 UTC 2018


commit d1874b433953f64b13a2feb0edc4bbff8940d503
Author: Nick Mathewson <nickm at torproject.org>
Date:   Mon Mar 26 09:56:12 2018 -0400

    Make extend_info_from_node() more picky about node contents
    
    This update is needed to make it consistent with the behavior of
    node_awaiting_ipv6(), which doesn't believe in the addresses from
    routerinfos unless it actually plans to use those routerinfos.
    
    Fixes bug 25213; bugfix on b66b62fb7525cac1e1 in 0.3.3.1-alpha,
    which tightened up the definition of node_awaiting_ipv6().
---
 changes/bug25213      |  5 +++++
 src/or/circuitbuild.c | 14 ++++++++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/changes/bug25213 b/changes/bug25213
new file mode 100644
index 000000000..bb196ca72
--- /dev/null
+++ b/changes/bug25213
@@ -0,0 +1,5 @@
+  o Minor bugfixes (warnings, ipv6):
+    - Avoid a bug warning that could occur when trying to connect to
+      a relay over IPv6 on a Tor instance that downloads router descriptors,
+      but prefers to use microdescriptors. Fixes bug 25213; bugfix on
+      0.3.3.1-alpha.
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index 8fe6ba0e6..01921bac1 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -2857,8 +2857,18 @@ extend_info_from_node(const node_t *node, int for_direct_connect)
   tor_addr_port_t ap;
   int valid_addr = 0;
 
-  if (node->ri == NULL && (node->rs == NULL || node->md == NULL))
-    return NULL;
+  const int is_bridge = node_is_a_configured_bridge(node);
+  const int we_use_mds = we_use_microdescriptors_for_circuits(get_options());
+
+  if (is_bridge || !we_use_mds) {
+    /* We need an ri in this case. */
+    if (!node->ri)
+      return NULL;
+  } else {
+    /* Otherwise we need an md. */
+    if (node->rs == NULL || node->md == NULL)
+      return NULL;
+  }
 
   /* Choose a preferred address first, but fall back to an allowed address.
    * choose_address returns 1 on success, but get_prim_orport returns 0. */





More information about the tor-commits mailing list