Browse Source

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 17 years ago
parent
commit
9a7098487b
2 changed files with 10 additions and 2 deletions
  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;