[tor-commits] [tor/master] Do not try to download an EI for which we don't have a matching SD.

nickm at torproject.org nickm at torproject.org
Thu Feb 19 14:40:48 UTC 2015


commit 557a0c83f36eb1ea9a6c96aa94a488f4ce92f9ba
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu Feb 19 09:27:42 2015 -0500

    Do not try to download an EI for which we don't have a matching SD.
    
    This quiets some log messages for #13762, and adds a better INFO message
    for the underlying confusion.
---
 changes/bug13762_quiet |    5 +++++
 src/or/routerlist.c    |   43 ++++++++++++++++++++++++++++++++-----------
 2 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/changes/bug13762_quiet b/changes/bug13762_quiet
new file mode 100644
index 0000000..df541cc
--- /dev/null
+++ b/changes/bug13762_quiet
@@ -0,0 +1,5 @@
+  o Minor bugfixes (directory authority):
+    - Do not attempt to download extrainfo documents which we will be
+      unable to validate with a matching server descriptor. Fixes bug
+      13762; bugfix on 0.2.0.1-alpha.
+
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index a0437ce..375732a 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -4705,7 +4705,34 @@ update_extrainfo_downloads(time_t now)
         ++n_pending;
         continue;
       }
-      if (router_get_by_extrainfo_digest(d) != sd) {
+
+      const signed_descriptor_t *sd2 = router_get_by_extrainfo_digest(d);
+      if (sd2 != sd) {
+        if (sd2 != NULL) {
+          char d1[HEX_DIGEST_LEN+1], d2[HEX_DIGEST_LEN+1];
+          char d3[HEX_DIGEST_LEN+1], d4[HEX_DIGEST_LEN+1];
+          base16_encode(d1, sizeof(d1), sd->identity_digest, DIGEST_LEN);
+          base16_encode(d2, sizeof(d2), sd2->identity_digest, DIGEST_LEN);
+          base16_encode(d3, sizeof(d3), d, DIGEST_LEN);
+          base16_encode(d4, sizeof(d3), sd2->extra_info_digest, DIGEST_LEN);
+
+          log_info(LD_DIR, "Found an entry in %s with mismatched "
+                   "router_get_by_extrainfo_digest() value. This has ID %s "
+                   "but the entry in the map has ID %s. This has EI digest "
+                   "%s and the entry in the map has EI digest %s.",
+                   old_routers?"old_routers":"routers",
+                   d1, d2, d3, d4);
+        } else {
+          char d1[HEX_DIGEST_LEN+1], d2[HEX_DIGEST_LEN+1];
+          base16_encode(d1, sizeof(d1), sd->identity_digest, DIGEST_LEN);
+          base16_encode(d2, sizeof(d2), d, DIGEST_LEN);
+
+          log_info(LD_DIR, "Found an entry in %s with NULL "
+                   "router_get_by_extrainfo_digest() value. This has ID %s "
+                   "and EI digest %s.",
+                   old_routers?"old_routers":"routers",
+                   d1, d2);
+        }
         ++n_bogus[old_routers];
         continue;
       }
@@ -4715,16 +4742,10 @@ update_extrainfo_downloads(time_t now)
   digestmap_free(pending, NULL);
 
   log_info(LD_DIR, "Extrainfo download status: %d router with no ei, %d "
-           "with present ei, %d delaying, %d pending, %d downloadable.",
-           n_no_ei, n_have, n_delay, n_pending, smartlist_len(wanted));
-
-  if (n_bogus[0] || n_bogus[1]) {
-    static ratelim_t bogus_ei_warning = RATELIM_INIT(1800);
-    log_fn_ratelim(&bogus_ei_warning, LOG_WARN, LD_BUG,
-                   "While downloading extrainfo documents, I found %d "
-                   "inconsistencies in routers and %d inconsistencies in "
-                   "old_routers.", n_bogus[0], n_bogus[1]);
-  }
+           "with present ei, %d delaying, %d pending, %d downloadable, %d "
+           "bogus in routers, %d bogus in old_routers",
+           n_no_ei, n_have, n_delay, n_pending, smartlist_len(wanted),
+           n_bogus[0], n_bogus[1]);
 
   smartlist_shuffle(wanted);
 





More information about the tor-commits mailing list