浏览代码

Merge remote-tracking branch 'linus/bug6757'

Nick Mathewson 13 年之前
父节点
当前提交
03e4b5a9d7
共有 3 个文件被更改,包括 20 次插入16 次删除
  1. 5 0
      changes/6757
  2. 3 9
      src/or/circuitbuild.c
  3. 12 7
      src/or/nodelist.c

+ 5 - 0
changes/6757

@@ -0,0 +1,5 @@
+  o Minor bugfixes (client):
+    - Make clients running with IPv6 bridges connect over IPv6 again,
+      even without setting new config options ClientUseIPv6 and
+      ClientPreferIPv6ORPort.
+      Fixes bug 6757; bugfix on 0.2.4.1-alpha.

+ 3 - 9
src/or/circuitbuild.c

@@ -5663,15 +5663,9 @@ rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node)
       }
     }
 
-    /* Mark bridge as preferably connected to over IPv6 if its IPv6
-       address is in a Bridge line and ClientPreferIPv6ORPort is
-       set. Unless both is true, a potential IPv6 OR port of this
-       bridge won't get selected.
-
-       XXX ipv6_preferred is never reset (#6757) */
-    if (get_options()->ClientPreferIPv6ORPort == 1 &&
-        tor_addr_family(&bridge->addr) == AF_INET6)
-      node->ipv6_preferred = 1;
+    /* Mark which address to use based on which bridge_t we got. */
+    node->ipv6_preferred = (tor_addr_family(&bridge->addr) == AF_INET6 &&
+                            !tor_addr_is_null(&node->ri->ipv6_addr));
 
     /* XXXipv6 we lack support for falling back to another address for
        the same relay, warn the user */

+ 12 - 7
src/or/nodelist.c

@@ -872,18 +872,23 @@ node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out)
 void
 node_get_pref_orport(const node_t *node, tor_addr_port_t *ap_out)
 {
+  const or_options_t *options = get_options();
   tor_assert(ap_out);
 
   /* Cheap implementation of config option ClientUseIPv6 -- simply
-     don't prefer IPv6 when ClientUseIPv6 is not set. (See #4455 for
-     more on this subject.) Note that this filter is too strict since
-     we're hindering not only clients! Erring on the safe side
-     shouldn't be a problem though. XXX move this check to where
-     outgoing connections are made? -LN */
-  if (get_options()->ClientUseIPv6 == 1 && node_ipv6_preferred(node))
+     don't prefer IPv6 when ClientUseIPv6 is not set and we're not a
+     client running with bridges. See #4455 for more on this subject.
+
+     Note that this filter is too strict since we're hindering not
+     only clients! Erring on the safe side shouldn't be a problem
+     though. XXX move this check to where outgoing connections are
+     made? -LN */
+  if ((options->ClientUseIPv6 || options->UseBridges) &&
+      node_ipv6_preferred(node)) {
     node_get_pref_ipv6_orport(node, ap_out);
-  else
+  } else {
     node_get_prim_orport(node, ap_out);
+  }
 }
 
 /** Copy the preferred IPv6 OR port (IP address and TCP port) for