Stop discarding downloaded full descriptors when using microdescs for circuits

This affects clients with FetchUselessDescriptors 1.

It might also cause subtle bugs on directory mirrors and authorities,
causing them to consider all full descriptors as failed or old.
This commit is contained in:
teor 2016-11-30 12:20:28 +11:00
parent e061cf4d1d
commit 04f7944891
No known key found for this signature in database
GPG Key ID: 450CBA7F968F094B
2 changed files with 10 additions and 4 deletions

5
changes/bug20839 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes (descriptors):
- Correctly recognise downloaded full descriptors as valid, even when
using microdescriptors as circuits. This affects clients with
FetchUselessDescriptors set, and may affect directory authorities.
Fixes bug 20839; bugfix on commit 6083276 in 0.2.3.2-alpha.

View File

@ -3896,7 +3896,7 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
router_describe(router));
*msg = "Router descriptor is not referenced by any network-status.";
/* Only journal this desc if we'll be serving it. */
/* Only journal this desc if we want to keep old descriptors */
if (!from_cache && should_cache_old_descriptors())
signed_desc_append_to_journal(&router->cache_info,
&routerlist->desc_store);
@ -4526,13 +4526,14 @@ router_load_extrainfo_from_string(const char *s, const char *eos,
smartlist_free(extrainfo_list);
}
/** Return true iff any networkstatus includes a descriptor whose digest
* is that of <b>desc</b>. */
/** Return true iff the latest ns-flavored consensus includes a descriptor
* whose digest is that of <b>desc</b>. */
static int
signed_desc_digest_is_recognized(signed_descriptor_t *desc)
{
const routerstatus_t *rs;
networkstatus_t *consensus = networkstatus_get_latest_consensus();
networkstatus_t *consensus = networkstatus_get_latest_consensus_by_flavor(
FLAV_NS);
if (consensus) {
rs = networkstatus_vote_find_entry(consensus, desc->identity_digest);