Explorar el Código

If we are not using BEGIN_DIR cells, don't attempt to contact hidden service directories with non-open dir port.

svn:r16960
Karsten Loesing hace 18 años
padre
commit
9a7098487b
Se han modificado 2 ficheros con 10 adiciones y 2 borrados
  1. 2 0
      ChangeLog
  2. 8 2
      src/or/routerlist.c

+ 2 - 0
ChangeLog

@@ -56,6 +56,8 @@ Changes in version 0.2.1.6-alpha - 2008-09-xx
       port 80, we would previously reject the connection. Now, we assume
       port 80, we would previously reject the connection. Now, we assume
       the user knows what they were asking for. Fixes bug 752. Bugfix
       the user knows what they were asking for. Fixes bug 752. Bugfix
       on 0.0.9rc5. Diagnosed by BarkerJr.
       on 0.0.9rc5. Diagnosed by BarkerJr.
+    - If we are not using BEGIN_DIR cells, don't attempt to contact hidden
+      service directories with non-open dir port. Bugfix on 0.2.0.10-alpha.
 
 
   o Minor features:
   o Minor features:
     - Update to the "September 1 2008" ip-to-country file.
     - Update to the "September 1 2008" ip-to-country file.

+ 8 - 2
src/or/routerlist.c

@@ -4918,6 +4918,7 @@ hid_serv_get_responsible_directories(smartlist_t *responsible_dirs,
 {
 {
   int start, found, n_added = 0, i;
   int start, found, n_added = 0, i;
   networkstatus_t *c = networkstatus_get_latest_consensus();
   networkstatus_t *c = networkstatus_get_latest_consensus();
+  int use_begindir = get_options()->TunnelDirConns;
   if (!c || !smartlist_len(c->routerstatus_list)) {
   if (!c || !smartlist_len(c->routerstatus_list)) {
     log_warn(LD_REND, "We don't have a consensus, so we can't perform v2 "
     log_warn(LD_REND, "We don't have a consensus, so we can't perform v2 "
              "rendezvous operations.");
              "rendezvous operations.");
@@ -4930,9 +4931,14 @@ hid_serv_get_responsible_directories(smartlist_t *responsible_dirs,
   do {
   do {
     routerstatus_t *r = smartlist_get(c->routerstatus_list, i);
     routerstatus_t *r = smartlist_get(c->routerstatus_list, i);
     if (r->is_hs_dir) {
     if (r->is_hs_dir) {
-      smartlist_add(responsible_dirs, r);
+      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);
       if (++n_added == REND_NUMBER_OF_CONSECUTIVE_REPLICAS)
       if (++n_added == REND_NUMBER_OF_CONSECUTIVE_REPLICAS)
-        return 0;
+        break;
     }
     }
     if (++i == smartlist_len(c->routerstatus_list))
     if (++i == smartlist_len(c->routerstatus_list))
       i = 0;
       i = 0;