ソースを参照

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 年 前
コミット
9a7098487b
2 ファイル変更10 行追加2 行削除
  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;