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

Merge remote-tracking branch 'origin/maint-0.2.2'

Conflicts:
	src/or/dirserv.c
	src/or/networkstatus.c

Conflicts were related to routerinfo->node shift.
Nick Mathewson пре 12 година
родитељ
комит
41eef6680e
8 измењених фајлова са 35 додато и 9 уклоњено
  1. 5 0
      changes/bug2649a
  2. 5 0
      changes/bug2649b
  3. 6 1
      doc/tor.1.txt
  4. 2 1
      src/or/config.c
  5. 12 5
      src/or/dirserv.c
  6. 1 1
      src/or/dirvote.h
  7. 1 1
      src/or/networkstatus.c
  8. 3 0
      src/or/or.h

+ 5 - 0
changes/bug2649a

@@ -0,0 +1,5 @@
+  o Minor features:
+    - Add a VoteOnHidServDirectoriesV2 configuration option to allow
+      directory authorities to abstain from voting on assignment of
+      the HSDir consensus flag.  Related to bug 2649.
+

+ 5 - 0
changes/bug2649b

@@ -0,0 +1,5 @@
+  o Minor bugfixes:
+    - Change the default required uptime for a relay to be accepted as
+      a HSDir from 24 hours to 25 hours.  Bugfix on 0.2.0.10-alpha;
+      fixes bug 2649.
+

+ 6 - 1
doc/tor.1.txt

@@ -1285,7 +1285,7 @@ if DirPort is non-zero):
 
 **MinUptimeHidServDirectoryV2** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**::
     Minimum uptime of a v2 hidden service directory to be accepted as such by
-    authoritative directories. (Default: 24 hours)
+    authoritative directories. (Default: 25 hours)
 
 **DirPort** __PORT__|**auto**::
     If this option is nonzero, advertise the directory service on this port.
@@ -1437,6 +1437,11 @@ DIRECTORY AUTHORITY SERVER OPTIONS
     that fine-grained information about nodes can be discarded when it hasn't
     changed for a given amount of time.  (Default: 24 hours)
 
+**VoteOnHidServDirectoriesV2** **0**|**1**::
+    When this option is set in addition to **AuthoritativeDirectory**, Tor
+    votes on whether to accept relays as hidden service directories.
+    (Default: 1)
+
 HIDDEN SERVICE OPTIONS
 ----------------------
 

+ 2 - 1
src/or/config.c

@@ -420,7 +420,8 @@ static config_var_t _option_vars[] = {
   VAR("__HashedControlSessionPassword", LINELIST, HashedControlSessionPassword,
       NULL),
   VAR("__OwningControllerProcess",STRING,OwningControllerProcess, NULL),
-  V(MinUptimeHidServDirectoryV2, INTERVAL, "24 hours"),
+  V(MinUptimeHidServDirectoryV2, INTERVAL, "25 hours"),
+  V(VoteOnHidServDirectoriesV2,  BOOL,     "1"),
   V(_UsingTestNetworkDefaults,   BOOL,     "0"),
 
   { NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }

+ 12 - 5
src/or/dirserv.c

@@ -2301,7 +2301,7 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
                                  routerinfo_t *ri,
                                  time_t now,
                                  int naming, int listbadexits,
-                                 int listbaddirs)
+                                 int listbaddirs, int vote_on_hsdirs)
 {
   int unstable_version =
     !tor_version_as_new_as(ri->platform,"0.1.1.16-rc-cvs");
@@ -2340,10 +2340,11 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
   } else {
     rs->is_possible_guard = 0;
   }
+
   rs->is_bad_directory = listbaddirs && node->is_bad_directory;
   rs->is_bad_exit = listbadexits && node->is_bad_exit;
   node->is_hs_dir = dirserv_thinks_router_is_hs_dir(ri, node, now);
-  rs->is_hs_dir = node->is_hs_dir;
+  rs->is_hs_dir = vote_on_hsdirs && node->is_hs_dir;
   rs->is_v2_dir = ri->dir_port != 0;
 
   if (!strcasecmp(ri->nickname, UNNAMED_ROUTER_NICKNAME))
@@ -2563,6 +2564,7 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
   int naming = options->NamingAuthoritativeDir;
   int listbadexits = options->AuthDirListBadExits;
   int listbaddirs = options->AuthDirListBadDirs;
+  int vote_on_hsdirs = options->VoteOnHidServDirectoriesV2;
   routerlist_t *rl = router_get_routerlist();
   time_t now = time(NULL);
   time_t cutoff = now - ROUTER_MAX_AGE_TO_PUBLISH;
@@ -2629,7 +2631,8 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
       vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
       rs = &vrs->status;
       set_routerstatus_from_routerinfo(rs, node, ri, now,
-                                       naming, listbadexits, listbaddirs);
+                                       naming, listbadexits, listbaddirs,
+                                       vote_on_hsdirs);
 
       if (digestmap_get(omit_as_sybil, ri->cache_info.identity_digest))
         clear_status_flags_on_sybil(rs);
@@ -2706,7 +2709,7 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
   v3_out->server_versions = server_versions;
   v3_out->known_flags = smartlist_create();
   smartlist_split_string(v3_out->known_flags,
-                "Authority Exit Fast Guard HSDir Stable V2Dir Valid",
+                "Authority Exit Fast Guard Stable V2Dir Valid",
                 0, SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
   if (vote_on_reachability)
     smartlist_add(v3_out->known_flags, tor_strdup("Running"));
@@ -2718,6 +2721,8 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
     smartlist_add(v3_out->known_flags, tor_strdup("Named"));
     smartlist_add(v3_out->known_flags, tor_strdup("Unnamed"));
   }
+  if (vote_on_hsdirs)
+    smartlist_add(v3_out->known_flags, tor_strdup("HSDir"));
   smartlist_sort_strings(v3_out->known_flags);
 
   if (options->ConsensusParams) {
@@ -2780,6 +2785,7 @@ generate_v2_networkstatus_opinion(void)
   int versioning = options->VersioningAuthoritativeDir;
   int listbaddirs = options->AuthDirListBadDirs;
   int listbadexits = options->AuthDirListBadExits;
+  int vote_on_hsdirs = options->VoteOnHidServDirectoriesV2;
   const char *contact;
   char *version_lines = NULL;
   smartlist_t *routers = NULL;
@@ -2874,7 +2880,8 @@ generate_v2_networkstatus_opinion(void)
         continue;
       }
       set_routerstatus_from_routerinfo(&rs, node, ri, now,
-                                       naming, listbadexits, listbaddirs);
+                                       naming, listbadexits, listbaddirs,
+                                       vote_on_hsdirs);
 
       if (digestmap_get(omit_as_sybil, ri->cache_info.identity_digest))
         clear_status_flags_on_sybil(&rs);

+ 1 - 1
src/or/dirvote.h

@@ -63,7 +63,7 @@ void set_routerstatus_from_routerinfo(routerstatus_t *rs,
                                       node_t *node,
                                       routerinfo_t *ri, time_t now,
                                       int naming, int listbadexits,
-                                      int listbaddirs);
+                                      int listbaddirs, int vote_on_hsdirs);
 void router_clear_status_flags(routerinfo_t *ri);
 networkstatus_t *
 dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,

+ 1 - 1
src/or/networkstatus.c

@@ -2133,7 +2133,7 @@ networkstatus_getinfo_by_purpose(const char *purpose_string, time_t now)
     if (bridge_auth && ri->purpose == ROUTER_PURPOSE_BRIDGE)
       dirserv_set_router_is_running(ri, now);
     /* then generate and write out status lines for each of them */
-    set_routerstatus_from_routerinfo(&rs, node, ri, now, 0, 0, 0);
+    set_routerstatus_from_routerinfo(&rs, node, ri, now, 0, 0, 0, 0);
     smartlist_add(statuses, networkstatus_getinfo_helper_single(&rs));
   });
 

+ 3 - 0
src/or/or.h

@@ -2901,8 +2901,11 @@ typedef struct {
                              * we don't need to? */
   int HidServDirectoryV2; /**< Do we participate in the HS DHT? */
 
+  int VoteOnHidServDirectoriesV2; /**< As a directory authority, vote on
+                                   * assignment of the HSDir flag? */
   int MinUptimeHidServDirectoryV2; /**< As directory authority, accept hidden
                                     * service directories after what time? */
+
   int FetchUselessDescriptors; /**< Do we fetch non-running descriptors too? */
   int AllDirActionsPrivate; /**< Should every directory action be sent
                              * through a Tor circuit? */