Commit 5e9bd1b5 authored by Karsten Loesing's avatar Karsten Loesing
Browse files

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.
parent 8a173635
Loading
Loading
Loading
Loading

changes/bug11683

0 → 100644
+6 −0
Original line number Diff line number Diff line
  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.
+3 −3
Original line number Diff line number Diff line
@@ -197,9 +197,9 @@ dir_conn_purpose_to_string(int purpose)
  return "(unknown)";
}

/** Return true iff <b>identity_digest</b> is the digest of a router we
 * believe to support extrainfo downloads.  (If <b>is_authority</b> we do
 * additional checking that's only valid for authorities.) */
/** Return true iff <b>identity_digest</b> is the digest of a router which
 * says that it caches extrainfos.  (If <b>is_authority</b> we always
 * believe that to be true.) */
int
router_supports_extrainfo(const char *identity_digest, int is_authority)
{
+4 −2
Original line number Diff line number Diff line
@@ -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)