Browse Source

Merge remote-tracking branches 'rransom/bug2722' and 'rransom/bug2722b' into maint-0.2.2

Nick Mathewson 14 years ago
parent
commit
6b9aadd557
3 changed files with 15 additions and 8 deletions
  1. 11 0
      changes/bug2722
  2. 2 0
      src/or/dirserv.c
  3. 2 8
      src/or/routerlist.c

+ 11 - 0
changes/bug2722

@@ -0,0 +1,11 @@
+  o Minor bugfixes
+    - Ignore the TunnelDirConns option when determining which HSDir
+      relays are responsible for a hidden service descriptor ID.
+      Currently, clients and hidden services with TunnelDirConns off
+      will skip over HSDir relays which do not advertise a DirPort
+      when making a list of HSDirs responsible for a descriptor ID,
+      even though they would never try to use a HSDir's DirPort to
+      upload or fetch a hidden service descriptor.  Fixes bug 2722;
+      bugfix on 0.2.1.6-alpha.
+
+

+ 2 - 0
src/or/dirserv.c

@@ -1811,6 +1811,8 @@ dirserv_thinks_router_is_hs_dir(routerinfo_t *router, time_t now)
    * bug 1693. In the future, once relays set wants_to_be_hs_dir
    * correctly, we can revert to only checking dir_port if router's
    * version is too old. */
+  /* XXX Unfortunately, we need to keep checking dir_port until all
+   * *clients* suffering from bug 2722 are obsolete. */
   return (router->wants_to_be_hs_dir && router->dir_port &&
           uptime > get_options()->MinUptimeHidServDirectoryV2 &&
           router->is_running);

+ 2 - 8
src/or/routerlist.c

@@ -5727,7 +5727,6 @@ hid_serv_get_responsible_directories(smartlist_t *responsible_dirs,
 {
   int start, found, n_added = 0, i;
   networkstatus_t *c = networkstatus_get_latest_consensus();
-  int use_begindir = get_options()->TunnelDirConns;
   if (!c || !smartlist_len(c->routerstatus_list)) {
     log_warn(LD_REND, "We don't have a consensus, so we can't perform v2 "
              "rendezvous operations.");
@@ -5740,14 +5739,9 @@ hid_serv_get_responsible_directories(smartlist_t *responsible_dirs,
   do {
     routerstatus_t *r = smartlist_get(c->routerstatus_list, i);
     if (r->is_hs_dir) {
-      if (r->dir_port || use_begindir)
-        smartlist_add(responsible_dirs, r);
-      else
-        log_info(LD_REND, "Not adding router '%s' to list of responsible "
-                 "hidden service directories, because we have no way of "
-                 "reaching it.", r->nickname);
+      smartlist_add(responsible_dirs, r);
       if (++n_added == REND_NUMBER_OF_CONSECUTIVE_REPLICAS)
-        break;
+        return 0;
     }
     if (++i == smartlist_len(c->routerstatus_list))
       i = 0;