Sfoglia il codice sorgente

No dirport should mean no hsdir flag (bug 1693)

Roger Dingledine 14 anni fa
parent
commit
c6f5792404
2 ha cambiato i file con 14 aggiunte e 2 eliminazioni
  1. 8 0
      changes/1693-withhold-hsdir-if-no-dirport
  2. 6 2
      src/or/dirserv.c

+ 8 - 0
changes/1693-withhold-hsdir-if-no-dirport

@@ -0,0 +1,8 @@
+  o Major bugfixes:
+    - Stop assigning the HSDir flag to relays that disable their
+      DirPort (and thus will refuse to answer directory requests). This
+      fix should dramatically improve the reachability of hidden services:
+      hidden services and hidden service clients pick three HSDir relays
+      to store and retrieve the hidden service descriptor, and currently
+      about half of the HSDir relays will refuse to work. Bugfix on
+      0.2.0.10-alpha; fixes part of bug 1693.

+ 6 - 2
src/or/dirserv.c

@@ -1717,7 +1717,7 @@ dirserv_thinks_router_is_unreliable(time_t now,
 
 /** Return true iff <b>router</b> should be assigned the "HSDir" flag.
  * Right now this means it advertises support for it, it has a high
- * uptime, and it's currently considered Running.
+ * uptime, it has a DirPort open, and it's currently considered Running.
  *
  * This function needs to be called after router-\>is_running has
  * been set.
@@ -1727,7 +1727,11 @@ dirserv_thinks_router_is_hs_dir(routerinfo_t *router, time_t now)
 {
   long uptime = real_uptime(router, now);
 
-  return (router->wants_to_be_hs_dir &&
+  /* XXX We shouldn't need to check dir_port, but we do because of
+   * 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. */
+  return (router->wants_to_be_hs_dir && router->dir_port &&
           uptime > get_options()->MinUptimeHidServDirectoryV2 &&
           router->is_running);
 }