]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Take microdesc IPv6 address into account when setting node->ipv6_preferred.
authorLinus Nordberg <linus@torproject.org>
Fri, 31 Aug 2012 21:02:19 +0000 (23:02 +0200)
committerNick Mathewson <nickm@torproject.org>
Tue, 4 Sep 2012 16:57:21 +0000 (12:57 -0400)
Also, do this only for clients, explicitly.

Also, give the flag a value every time we set consensus. We used to
touch it only when ClientPreferIPv6ORPort was set, which was wrong.

src/or/nodelist.c

index 1d1bbfc026ee0604dbd2637fb4e67001e942b94b..9ee114bd75960ec7429c1d784adabcdebd92d6d1 100644 (file)
@@ -206,6 +206,7 @@ nodelist_set_consensus(networkstatus_t *ns)
 {
   const or_options_t *options = get_options();
   int authdir = authdir_mode_v2(options) || authdir_mode_v3(options);
+  int client = !server_mode(options);
 
   init_nodelist();
   if (ns->flavor == FLAV_MICRODESC)
@@ -242,8 +243,11 @@ nodelist_set_consensus(networkstatus_t *ns)
       node->is_bad_directory = rs->is_bad_directory;
       node->is_bad_exit = rs->is_bad_exit;
       node->is_hs_dir = rs->is_hs_dir;
-      if (options->ClientPreferIPv6ORPort == 1)
-        node->ipv6_preferred = !tor_addr_is_null(&rs->ipv6_addr);
+      node->ipv6_preferred = 0;
+      if (client && options->ClientPreferIPv6ORPort == 1 &&
+          (tor_addr_is_null(&rs->ipv6_addr) == 0 ||
+           (node->md && tor_addr_is_null(&node->md->ipv6_addr) == 0)))
+        node->ipv6_preferred = 1;
     }
 
   } SMARTLIST_FOREACH_END(rs);