diff --git a/ChangeLog b/ChangeLog index 6eb820ec50..c4f18ba8b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,8 +10,12 @@ Changes in version 0.2.0.12-alpha - 2007-11-?? newly picked entry guard. Reported by Mike Perry. - Changing the ExitPolicyRejectPrivate setting should cause us to rebuild the descriptor. - - When picking v2 hidden service directories, don't pick ones that - aren't listed as Running. + - When authorities detected more than two relays running on the same + IP address, they were clearing all the status flags but forgetting + to clear the "hsdir" flag. So clients were being told that a + given relay was the right choice for a v2 hsdir lookup, yet they + never had its descriptor because it was marked as 'not running' + in the consensus. - If we're trying to fetch a bridge descriptor and there's no way the bridge authority could help us (for example, we don't know a digest, or there is no bridge authority), don't be so eager to diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 36f661a4ca..39263467d3 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -2022,7 +2022,10 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key, if (digestmap_get(omit_as_sybil, ri->cache_info.identity_digest)) { rs->is_authority = rs->is_exit = rs->is_stable = rs->is_fast = rs->is_running = rs->is_named = rs->is_valid = rs->is_v2_dir = - rs->is_possible_guard = 0; + rs->is_hs_dir = rs->is_possible_guard = 0; + /* FFFF we might want some mechanism to check later on if we + * missed zeroing any flags: it's easy to add a new flag but + * forget to add it to this clause. */ } if (!vote_on_reachability) rs->is_running = 0; diff --git a/src/or/routerlist.c b/src/or/routerlist.c index eeb4909649..dce42b5731 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -4480,7 +4480,7 @@ hid_serv_get_responsible_directories(smartlist_t *responsible_dirs, i = start; do { routerstatus_t *r = smartlist_get(c->routerstatus_list, i); - if (r->is_hs_dir && r->is_running) { + if (r->is_hs_dir) { smartlist_add(responsible_dirs, r); if (++n_added == REND_NUMBER_OF_CONSECUTIVE_REPLICAS) return 0;