diff --git a/changes/bug11683 b/changes/bug11683 new file mode 100644 index 0000000000..52f623c6c5 --- /dev/null +++ b/changes/bug11683 @@ -0,0 +1,6 @@ + o Minor bugfixes: + - Always believe that v3 directory authorities serve extra-info + documents, regardless of whether their server descriptor contains a + "caches-extra-info" line or not. Fixes part of #11683. Bugfix on + 0.2.0.1-alpha. + diff --git a/src/or/directory.c b/src/or/directory.c index 76cb8fa0bc..8b37590862 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -197,9 +197,9 @@ dir_conn_purpose_to_string(int purpose) return "(unknown)"; } -/** Return true iff identity_digest is the digest of a router we - * believe to support extrainfo downloads. (If is_authority we do - * additional checking that's only valid for authorities.) */ +/** Return true iff identity_digest is the digest of a router which + * says that it caches extrainfos. (If is_authority we always + * believe that to be true.) */ int router_supports_extrainfo(const char *identity_digest, int is_authority) { diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 8f3477a4a4..2c0f193672 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -1438,7 +1438,7 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags) /* Find all the running dirservers we know about. */ SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), const node_t *, node) { - int is_trusted; + int is_trusted, is_trusted_extrainfo; int is_overloaded; tor_addr_t addr; const routerstatus_t *status = node->rs; @@ -1453,8 +1453,10 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags) if (requireother && router_digest_is_me(node->identity)) continue; is_trusted = router_digest_is_trusted_dir(node->identity); + is_trusted_extrainfo = router_digest_is_trusted_dir_type( + node->identity, EXTRAINFO_DIRINFO); if ((type & EXTRAINFO_DIRINFO) && - !router_supports_extrainfo(node->identity, 0)) + !router_supports_extrainfo(node->identity, is_trusted_extrainfo)) continue; if ((type & MICRODESC_DIRINFO) && !is_trusted && !node->rs->version_supports_microdesc_cache)