瀏覽代碼

When establishing a hidden service, introduction points that originate from cannibalized circuits are completely ignored and not included in rendezvous service descriptors. Bugfix on 0.2.0.14-alpha. Backport candidate.

svn:r15332
Karsten Loesing 18 年之前
父節點
當前提交
693d7e3e35
共有 2 個文件被更改,包括 21 次插入1 次删除
  1. 5 1
      ChangeLog
  2. 16 0
      src/or/rendservice.c

+ 5 - 1
ChangeLog

@@ -22,6 +22,10 @@ Changes in version 0.2.1.2-alpha - 2008-??-??
       would crash a dirserver if it did not already have a consensus.
       would crash a dirserver if it did not already have a consensus.
     - Clean up some macro/CPP interactions: some GCC versions don't like
     - Clean up some macro/CPP interactions: some GCC versions don't like
       #if/#endif pairs inside macro arguments.  Fixes bug 707.
       #if/#endif pairs inside macro arguments.  Fixes bug 707.
+    - When establishing a hidden service, introduction points that originate
+      from cannibalized circuits are completely ignored and not included in
+      rendezvous service descriptors. This might be another reason for delay
+      in making a hidden service available. Bugfix on 0.2.0.14-alpha.
 
 
 
 
 Changes in version 0.2.1.1-alpha - 2008-06-13
 Changes in version 0.2.1.1-alpha - 2008-06-13
@@ -127,7 +131,7 @@ Changes in version 0.2.0.28-rc - 2008-06-13
     - While setting up a hidden service, some valid introduction circuits
     - While setting up a hidden service, some valid introduction circuits
       were overlooked and abandoned. This might be the reason for
       were overlooked and abandoned. This might be the reason for
       the long delay in making a hidden service available. Bugfix on
       the long delay in making a hidden service available. Bugfix on
-      0.2.0.13-alpha.
+      0.2.0.14-alpha.
 
 
   o Minor features:
   o Minor features:
     - Update to the "June 9 2008" ip-to-country file.
     - Update to the "June 9 2008" ip-to-country file.

+ 16 - 0
src/or/rendservice.c

@@ -797,6 +797,22 @@ rend_service_launch_establish_intro(rend_service_t *service,
              escaped_safe_str(intro->extend_info->nickname));
              escaped_safe_str(intro->extend_info->nickname));
     return -1;
     return -1;
   }
   }
+
+  if (memcmp(intro->extend_info->identity_digest,
+      launched->build_state->chosen_exit->identity_digest, DIGEST_LEN)) {
+    char cann[HEX_DIGEST_LEN+1], orig[HEX_DIGEST_LEN+1];
+    base16_encode(cann, sizeof(cann),
+                  launched->build_state->chosen_exit->identity_digest,
+                  DIGEST_LEN);
+    base16_encode(orig, sizeof(orig),
+                  intro->extend_info->identity_digest, DIGEST_LEN);
+    log_info(LD_REND, "The intro circuit we just cannibalized ends at $%s, "
+                      "but we requested an intro circuit to $%s. Updating "
+                      "our service.", cann, orig);
+    tor_free(intro->extend_info);
+    intro->extend_info = extend_info_dup(launched->build_state->chosen_exit);
+  }
+
   strlcpy(launched->rend_query, service->service_id,
   strlcpy(launched->rend_query, service->service_id,
           sizeof(launched->rend_query));
           sizeof(launched->rend_query));
   memcpy(launched->rend_pk_digest, service->pk_digest, DIGEST_LEN);
   memcpy(launched->rend_pk_digest, service->pk_digest, DIGEST_LEN);