From 5e9bd1b5db1815698f7aed6caf5df9587185a8d1 Mon Sep 17 00:00:00 2001 From: Karsten Loesing Date: Mon, 5 May 2014 15:31:52 +0200 Subject: 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. --- changes/bug11683 | 6 ++++++ src/or/directory.c | 6 +++--- src/or/routerlist.c | 6 ++++-- 3 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 changes/bug11683 diff --git a/changes/bug11683 b/changes/bug11683 new file mode 100644 index 000000000..52f623c6c --- /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 76cb8fa0b..8b3759086 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 8f3477a4a..2c0f19367 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) -- cgit v1.2.3