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