Browse Source

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 17 years ago
parent
commit
693d7e3e35
2 changed files with 21 additions and 1 deletions
  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);