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
This commit is contained in:
Karsten Loesing 2008-06-17 17:10:03 +00:00
parent 1ad83d74b1
commit 693d7e3e35
2 changed files with 21 additions and 1 deletions

View File

@ -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.

View File

@ -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);