diff --git a/src/or/main.c b/src/or/main.c index 0fe663b193..c961d3414d 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -826,7 +826,8 @@ run_scheduled_events(time_t now) if (options->DirPort && !options->V1AuthoritativeDir) { /* XXX actually, we should only do this if we want to advertise * our dirport. not simply if we configured one. -RD */ - directory_get_from_dirserver(DIR_PURPOSE_FETCH_DIR, NULL, 1); + if (any_trusted_dir_supports_v1()) + directory_get_from_dirserver(DIR_PURPOSE_FETCH_DIR, NULL, 1); } time_to_fetch_directory = now + get_dir_fetch_period(options); diff --git a/src/or/or.h b/src/or/or.h index 49c47caa30..bc4bce0071 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2341,6 +2341,7 @@ void add_trusted_dir_server(const char *nickname, const char *address, uint16_t port, const char *digest, int supports_v1); void clear_trusted_dir_servers(void); +int any_trusted_dir_supports_v1(void); networkstatus_t *networkstatus_get_by_digest(const char *digest); local_routerstatus_t *router_get_combined_status_by_digest(const char *digest); void update_networkstatus_downloads(time_t now); diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 9cb1807265..1aaebb4468 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -2678,6 +2678,17 @@ clear_trusted_dir_servers(void) } } +/** Return 1 if any trusted dir server supports v1 directories, + * else return 0. */ +int +any_trusted_dir_supports_v1(void) +{ + if (trusted_dir_servers) + SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ent, + if (ent->is_v1_authority) return 1); + return 0; +} + /** Return the network status with a given identity digest. */ networkstatus_t * networkstatus_get_by_digest(const char *digest)