Believe that v3 dirauths always serve extra infos.

Clients should 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.
This commit is contained in:
Karsten Loesing 2014-05-05 15:31:52 +02:00
parent 8a173635bc
commit 5e9bd1b5db
3 changed files with 13 additions and 5 deletions

6
changes/bug11683 Normal file
View File

@ -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.

View File

@ -197,9 +197,9 @@ dir_conn_purpose_to_string(int purpose)
return "(unknown)"; return "(unknown)";
} }
/** Return true iff <b>identity_digest</b> is the digest of a router we /** Return true iff <b>identity_digest</b> is the digest of a router which
* believe to support extrainfo downloads. (If <b>is_authority</b> we do * says that it caches extrainfos. (If <b>is_authority</b> we always
* additional checking that's only valid for authorities.) */ * believe that to be true.) */
int int
router_supports_extrainfo(const char *identity_digest, int is_authority) router_supports_extrainfo(const char *identity_digest, int is_authority)
{ {

View File

@ -1438,7 +1438,7 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
/* Find all the running dirservers we know about. */ /* Find all the running dirservers we know about. */
SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), const node_t *, node) { SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), const node_t *, node) {
int is_trusted; int is_trusted, is_trusted_extrainfo;
int is_overloaded; int is_overloaded;
tor_addr_t addr; tor_addr_t addr;
const routerstatus_t *status = node->rs; 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)) if (requireother && router_digest_is_me(node->identity))
continue; continue;
is_trusted = router_digest_is_trusted_dir(node->identity); 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) && if ((type & EXTRAINFO_DIRINFO) &&
!router_supports_extrainfo(node->identity, 0)) !router_supports_extrainfo(node->identity, is_trusted_extrainfo))
continue; continue;
if ((type & MICRODESC_DIRINFO) && !is_trusted && if ((type & MICRODESC_DIRINFO) && !is_trusted &&
!node->rs->version_supports_microdesc_cache) !node->rs->version_supports_microdesc_cache)