Fix bug 763. When a hidden service is giving up on an introduction point candidate that was not included in the last published rendezvous descriptor, don't reschedule publication of the next descriptor.

svn:r15825
This commit is contained in:
Karsten Loesing 2008-07-10 21:02:01 +00:00
parent cb7cc9e12d
commit 9231858ff5
3 changed files with 25 additions and 4 deletions

View File

@ -16,6 +16,10 @@ Changes in version 0.2.1.3-alpha - 2008-07-xx
- Stop using __attribute__((nonnull)) with GCC: it can give us useful - Stop using __attribute__((nonnull)) with GCC: it can give us useful
warnings (occasionally), but it can also cause the compiler to warnings (occasionally), but it can also cause the compiler to
eliminate error-checking code. Suggested by Peter Gutmann. eliminate error-checking code. Suggested by Peter Gutmann.
- When a hidden service is giving up on an introduction point candidate
that was not included in the last published rendezvous descriptor,
don't reschedule publication of the next descriptor. Fixes bug 763.
Bugfix on 0.0.9.3.
Changes in version 0.2.0.29-rc - 2008-07-08 Changes in version 0.2.0.29-rc - 2008-07-08

View File

@ -1256,14 +1256,31 @@ rend_services_introduce(void)
for (j=0; j < smartlist_len(service->intro_nodes); ++j) { for (j=0; j < smartlist_len(service->intro_nodes); ++j) {
intro = smartlist_get(service->intro_nodes, j); intro = smartlist_get(service->intro_nodes, j);
router = router_get_by_digest(intro->extend_info->identity_digest); router = router_get_by_digest(intro->extend_info->identity_digest);
if (!router || !find_intro_circuit(intro, service->pk_digest, if (!router) {
service->descriptor_version)) { log_warn(LD_BUG, "We have picked router %s as introduction point, "
"but we don't have its router descriptor. Skipping.",
intro->extend_info->nickname);
continue;
}
if (!find_intro_circuit(intro, service->pk_digest,
service->descriptor_version)) {
log_info(LD_REND,"Giving up on %s as intro point for %s.", log_info(LD_REND,"Giving up on %s as intro point for %s.",
intro->extend_info->nickname, service->service_id); intro->extend_info->nickname, service->service_id);
if (service->desc) {
SMARTLIST_FOREACH(service->desc->intro_nodes, rend_intro_point_t *,
dintro, {
if (!memcmp(dintro->extend_info->identity_digest,
intro->extend_info->identity_digest, DIGEST_LEN)) {
log_info(LD_REND, "The intro point we are giving up on was "
"included in the last published descriptor. "
"Marking current descriptor as dirty.");
service->desc_is_dirty = now;
}
});
}
rend_intro_point_free(intro); rend_intro_point_free(intro);
smartlist_del(service->intro_nodes,j--); smartlist_del(service->intro_nodes,j--);
changed = 1; changed = 1;
service->desc_is_dirty = now;
} }
smartlist_add(intro_routers, router); smartlist_add(intro_routers, router);
} }