aboutsummaryrefslogtreecommitdiff
path: root/src/test/test_microdesc.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2014-10-03 10:55:50 -0400
committerNick Mathewson <nickm@torproject.org>2014-10-13 14:30:02 -0400
commita30594605e60d3a581f21c71a7d9e7a062800e3d (patch)
tree0a6900254158758b726724d551e85802935bc08a /src/test/test_microdesc.c
parentb448ec195dd8687d2d5f363e12fec046eb2d1677 (diff)
downloadtor-a30594605e60d3a581f21c71a7d9e7a062800e3d.tar.gz
tor-a30594605e60d3a581f21c71a7d9e7a062800e3d.zip
Treat unparseable (micro)descriptors and extrainfos as undownloadable
One pain point in evolving the Tor design and implementing has been adding code that makes clients reject directory documents that they previously would have accepted, if those descriptors actually exist. When this happened, the clients would get the document, reject it, and then decide to try downloading it again, ad infinitum. This problem becomes particularly obnoxious with authorities, since if some authorities accept a descriptor that others don't, the ones that don't accept it would go crazy trying to re-fetch it over and over. (See for example ticket #9286.) This patch tries to solve this problem by tracking, if a descriptor isn't parseable, what its digest was, and whether it is invalid because of some flaw that applies to the portion containing the digest. (This excludes RSA signature problems: RSA signatures aren't included in the digest. This means that a directory authority can still put another directory authority into a loop by mentioning a descriptor, and then serving that descriptor with an invalid RSA signatures. But that would also make the misbehaving directory authority get DoSed by the server it's attacking, so it's not much of an issue.) We already have a mechanism to mark something undownloadable with downloadstatus_mark_impossible(); we use that here for microdescriptors, extrainfos, and router descriptors. Unit tests to follow in another patch. Closes ticket #11243.
Diffstat (limited to 'src/test/test_microdesc.c')
-rw-r--r--src/test/test_microdesc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/test/test_microdesc.c b/src/test/test_microdesc.c
index 23e636fbf1..f7e87ac6e4 100644
--- a/src/test/test_microdesc.c
+++ b/src/test/test_microdesc.c
@@ -367,7 +367,7 @@ test_md_generate(void *arg)
microdesc_t *md = NULL;
(void)arg;
- ri = router_parse_entry_from_string(test_ri, NULL, 0, 0, NULL);
+ ri = router_parse_entry_from_string(test_ri, NULL, 0, 0, NULL, NULL);
tt_assert(ri);
md = dirvote_create_microdescriptor(ri, 8);
tt_str_op(md->body, ==, test_md_8);