]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Reject obsolete router/extrainfo descs more quietly.
authorNick Mathewson <nickm@torproject.org>
Mon, 11 Jan 2021 19:50:40 +0000 (14:50 -0500)
committerNick Mathewson <nickm@torproject.org>
Mon, 11 Jan 2021 19:50:40 +0000 (14:50 -0500)
Thanks to proposal 315 / ticket #30132, more fields are now
required in these documents.  But ancient Tors that try to upload
obsolete documents were causing the authorities to log warnings
about missing fields, and to do so very spammily.

We now detect the missing fields before tokenizing, and log at
debug.  This is a bit of ugliness, but it's probably a safer choice
than making _all_ unparseable-desc warnings into debug-level logs.

I'm looking at identity-ed25519 in extrainfos and proto in
routerdescs because they were (I believe) the latest-added fields in
Tor's history: any Tor that lacks them will also lack the other
newly required fields.

Fixes bug #40238; bugfix on 0.4.5.1-alpha.

src/feature/dirparse/routerparse.c

index 635fc4b49df825a6031d0b22f913fff2610ee3b2..3d90c1bc91cb91911a4a48cb2cce1f91542e9e42 100644 (file)
@@ -456,6 +456,12 @@ router_parse_entry_from_string(const char *s, const char *end,
     }
   }
 
+  if (!tor_memstr(s, end-s, "\nproto ")) {
+    log_debug(LD_DIR, "Found an obsolete router descriptor. "
+              "Rejecting quietly.");
+    goto err;
+  }
+
   if (router_get_router_hash(s, end - s, digest) < 0) {
     log_warn(LD_DIR, "Couldn't compute router hash.");
     goto err;
@@ -991,6 +997,11 @@ extrainfo_parse_entry_from_string(const char *s, const char *end,
   while (end > s+2 && *(end-1) == '\n' && *(end-2) == '\n')
     --end;
 
+  if (!tor_memstr(s, end-s, "\nidentity-ed25519")) {
+    log_debug(LD_DIR, "Found an obsolete extrainfo. Rejecting quietly.");
+    goto err;
+  }
+
   if (router_get_extrainfo_hash(s, end-s, digest) < 0) {
     log_warn(LD_DIR, "Couldn't compute router hash.");
     goto err;