Преглед изворни кода

Add config option AuthDirPublishIPv6.

Test for config option AuthDirPublishIPv6 == 1 rather than for running
as a bridge authority when deciding whether to care or not about IPv6
OR ports in descriptors.

Implements enhancement #6406.
Linus Nordberg пре 13 година
родитељ
комит
fff842a47c
5 измењених фајлова са 16 додато и 5 уклоњено
  1. 4 0
      changes/enh6406
  2. 6 0
      doc/tor.1.txt
  3. 1 0
      src/or/config.c
  4. 4 5
      src/or/dirserv.c
  5. 1 0
      src/or/or.h

+ 4 - 0
changes/enh6406

@@ -0,0 +1,4 @@
+  o Minor features:
+
+    - Add new configure option AuthDirPublishIPv6.  Implements
+      enhancement #6406.

+ 6 - 0
doc/tor.1.txt

@@ -1736,6 +1736,12 @@ DIRECTORY AUTHORITY SERVER OPTIONS
     ports.  When set to auto, Tor tries to find out if the authority
     ports.  When set to auto, Tor tries to find out if the authority
     relay has IPv6 connectivity or not. (Default: auto)
     relay has IPv6 connectivity or not. (Default: auto)
 
 
+**AuthDirPublishIPv6** **0**|**1**::
+
+    Authoritative directories only. When set to 0, Tor will not
+    include IPv6 OR ports in votes. When set to 1, Tor will vote for
+    IPv6 OR ports. (Default: 0).
+
 HIDDEN SERVICE OPTIONS
 HIDDEN SERVICE OPTIONS
 ----------------------
 ----------------------
 
 

+ 1 - 0
src/or/config.c

@@ -202,6 +202,7 @@ static config_var_t _option_vars[] = {
   V(AuthDirMaxServersPerAddr,    UINT,     "2"),
   V(AuthDirMaxServersPerAddr,    UINT,     "2"),
   V(AuthDirMaxServersPerAuthAddr,UINT,     "5"),
   V(AuthDirMaxServersPerAuthAddr,UINT,     "5"),
   V(AuthDirHasIPv6Connectivity,  AUTOBOOL, "auto"),
   V(AuthDirHasIPv6Connectivity,  AUTOBOOL, "auto"),
+  V(AuthDirPublishIPv6,          BOOL,     "0"),
   VAR("AuthoritativeDirectory",  BOOL, AuthoritativeDir,    "0"),
   VAR("AuthoritativeDirectory",  BOOL, AuthoritativeDir,    "0"),
   V(AutomapHostsOnResolve,       BOOL,     "0"),
   V(AutomapHostsOnResolve,       BOOL,     "0"),
   V(AutomapHostsSuffixes,        CSV,      ".onion,.exit"),
   V(AutomapHostsSuffixes,        CSV,      ".onion,.exit"),

+ 4 - 5
src/or/dirserv.c

@@ -2468,14 +2468,13 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
   strlcpy(rs->nickname, ri->nickname, sizeof(rs->nickname));
   strlcpy(rs->nickname, ri->nickname, sizeof(rs->nickname));
   rs->or_port = ri->or_port;
   rs->or_port = ri->or_port;
   rs->dir_port = ri->dir_port;
   rs->dir_port = ri->dir_port;
-  if (authdir_mode_bridge(options) &&
+  if (options->AuthDirPublishIPv6 == 1 &&
       !tor_addr_is_null(&ri->ipv6_addr) &&
       !tor_addr_is_null(&ri->ipv6_addr) &&
       (options->AuthDirHasIPv6Connectivity == 0 ||
       (options->AuthDirHasIPv6Connectivity == 0 ||
        node->last_reachable6 >= now - REACHABLE_TIMEOUT)) {
        node->last_reachable6 >= now - REACHABLE_TIMEOUT)) {
-    /* We're a bridge authority (we're not ready for IPv6 relays in
-       the consensus quite yet).  There's an IPv6 OR port and it's
-       reachable (or we know that we're not on IPv6) so copy it to the
-       routerstatus.  */
+    /* We're configured for publishing IPv6 OR ports. There's an IPv6
+       OR port and it's reachable (or we know that we're not on IPv6)
+       so copy it to the routerstatus.  */
     tor_addr_copy(&rs->ipv6_addr, &ri->ipv6_addr);
     tor_addr_copy(&rs->ipv6_addr, &ri->ipv6_addr);
     rs->ipv6_orport = ri->ipv6_orport;
     rs->ipv6_orport = ri->ipv6_orport;
   }
   }

+ 1 - 0
src/or/or.h

@@ -3274,6 +3274,7 @@ typedef struct {
                                      * number of servers per IP address shared
                                      * number of servers per IP address shared
                                      * with an authority. */
                                      * with an authority. */
   int AuthDirHasIPv6Connectivity; /**< Autoboolean: are we on IPv6?  */
   int AuthDirHasIPv6Connectivity; /**< Autoboolean: are we on IPv6?  */
+  int AuthDirPublishIPv6; /**< Boolean: should we list IPv6 OR ports? */
 
 
   /** If non-zero, always vote the Fast flag for any relay advertising
   /** If non-zero, always vote the Fast flag for any relay advertising
    * this amount of capacity or more. */
    * this amount of capacity or more. */