]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
When establishing a hidden service, introduction points that originate from cannibali...
authorKarsten Loesing <karsten.loesing@gmx.net>
Tue, 17 Jun 2008 17:10:03 +0000 (17:10 +0000)
committerKarsten Loesing <karsten.loesing@gmx.net>
Tue, 17 Jun 2008 17:10:03 +0000 (17:10 +0000)
svn:r15332

ChangeLog
src/or/rendservice.c

index a6586b66a48a3ebc86dbf5adf2a9defdc2520716..47905f810c2362cfeb649ae3f0b75304a1b0d4ac 100644 (file)
--- a/ChangeLog
+++ b/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.
     - Clean up some macro/CPP interactions: some GCC versions don't like
       #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
@@ -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
       were overlooked and abandoned. This might be the reason for
       the long delay in making a hidden service available. Bugfix on
-      0.2.0.13-alpha.
+      0.2.0.14-alpha.
 
   o Minor features:
     - Update to the "June 9 2008" ip-to-country file.
index f5009185e06a155e814f571b40ff50a07370d948..641153410e568aab6177d1ab2054190835cb970b 100644 (file)
@@ -797,6 +797,22 @@ rend_service_launch_establish_intro(rend_service_t *service,
              escaped_safe_str(intro->extend_info->nickname));
     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,
           sizeof(launched->rend_query));
   memcpy(launched->rend_pk_digest, service->pk_digest, DIGEST_LEN);