diff --git a/src/or/directory.c b/src/or/directory.c index 405e477761..91fd9c081c 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -157,7 +157,7 @@ directory_get_from_dirserver(uint8_t purpose, const char *resource, { routerstatus_t *rs = NULL; or_options_t *options = get_options(); - int fetch_fresh_first = server_mode(options) && options->DirPort != 0; + int prefer_authority = server_mode(options) && options->DirPort != 0; int directconn = !purpose_is_private(purpose); int need_v1_support = purpose == DIR_PURPOSE_FETCH_DIR || @@ -166,17 +166,7 @@ directory_get_from_dirserver(uint8_t purpose, const char *resource, purpose == DIR_PURPOSE_FETCH_SERVERDESC; if (directconn) { - if (fetch_fresh_first && purpose == DIR_PURPOSE_FETCH_NETWORKSTATUS && - !strcmpstart(resource,"fp/") && strlen(resource) >= HEX_DIGEST_LEN+3) { - /* Try to ask the actual dirserver its opinion. */ - char digest[DIGEST_LEN]; - trusted_dir_server_t *ds; - base16_decode(digest, DIGEST_LEN, resource+3, HEX_DIGEST_LEN); - ds = router_get_trusteddirserver_by_digest(digest); - if (ds) - rs = &(ds->fake_status); - } - if (!rs && fetch_fresh_first) { + if (prefer_authority) { /* only ask authdirservers, and don't ask myself */ rs = router_pick_trusteddirserver(need_v1_support, 1, 1, retry_if_no_servers); diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 9c0433c914..44139d1369 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -2225,8 +2225,11 @@ update_networkstatus_cache_downloads(time_t now) strlcpy(resource, "fp/", sizeof(resource)); base16_encode(resource+3, sizeof(resource)-3, ds->digest, DIGEST_LEN); strlcat(resource, ".z", sizeof(resource)); - directory_get_from_dirserver(DIR_PURPOSE_FETCH_NETWORKSTATUS, - resource,1); + directory_initiate_command_routerstatus( + &ds->fake_status, DIR_PURPOSE_FETCH_NETWORKSTATUS, + 0, /* Not private */ + resource, + NULL, 0 /* No payload. */); }); } else { /* A non-authority cache launches one connection to a random authority. */