diff --git a/ChangeLog b/ChangeLog index a6586b66a4..47905f810c 100644 --- 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. diff --git a/src/or/rendservice.c b/src/or/rendservice.c index f5009185e0..641153410e 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -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);