From 0b1ec16058f51cfa68da845507d1c30110cfff52 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 17 Apr 2012 12:09:19 -0400 Subject: Don't fetch v2 networkstatuses from caches, even if auths are down Fix for 5635; fix on 0.2.2.26-beta, where caches stopped fetching this information. --- src/or/directory.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src') diff --git a/src/or/directory.c b/src/or/directory.c index fbde7859e..6394aece7 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -354,6 +354,7 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose, const routerstatus_t *rs = NULL; const or_options_t *options = get_options(); int prefer_authority = directory_fetches_from_authorities(options); + int require_authority = 0; int get_via_tor = purpose_needs_anonymity(dir_purpose, router_purpose); dirinfo_type_t type; time_t if_modified_since = 0; @@ -369,6 +370,7 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose, case DIR_PURPOSE_FETCH_V2_NETWORKSTATUS: type = V2_DIRINFO; prefer_authority = 1; /* Only v2 authorities have these anyway. */ + require_authority = 1; /* Don't fallback to asking a non-authority */ break; case DIR_PURPOSE_FETCH_SERVERDESC: type = (router_purpose == ROUTER_PURPOSE_BRIDGE ? BRIDGE_DIRINFO : @@ -469,6 +471,11 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose, return; } } + if (rs == NULL && require_authority) { + log_info(LD_DIR, "No authorities were available for %s: will try " + "later.", dir_conn_purpose_to_string(dir_purpose)); + return; + } } if (!rs && type != BRIDGE_DIRINFO) { /* anybody with a non-zero dirport will do */ -- cgit v1.2.3