diff --git a/ChangeLog b/ChangeLog index 9d6eb6c2fe..204e853142 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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 warnings (occasionally), but it can also cause the compiler to 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 diff --git a/src/common/tortls.c b/src/common/tortls.c index d2751d1653..67c68fe6d4 100644 --- a/src/common/tortls.c +++ b/src/common/tortls.c @@ -564,7 +564,7 @@ tor_tls_context_new(crypto_pk_env_t *identity, unsigned int key_lifetime) SSL_CTX_set_options(result->ctx, SSL_OP_NO_SSLv2); #endif SSL_CTX_set_options(result->ctx, SSL_OP_SINGLE_DH_USE); - + #ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION SSL_CTX_set_options(result->ctx, SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); diff --git a/src/or/rendservice.c b/src/or/rendservice.c index b38d73e1c0..1965b12859 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -1256,14 +1256,31 @@ rend_services_introduce(void) for (j=0; j < smartlist_len(service->intro_nodes); ++j) { intro = smartlist_get(service->intro_nodes, j); router = router_get_by_digest(intro->extend_info->identity_digest); - if (!router || !find_intro_circuit(intro, service->pk_digest, - service->descriptor_version)) { + if (!router) { + 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.", 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); smartlist_del(service->intro_nodes,j--); changed = 1; - service->desc_is_dirty = now; } smartlist_add(intro_routers, router); }