]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
make sure, when we're checking if we have enough dir info, that
authorRoger Dingledine <arma@torproject.org>
Thu, 5 Jun 2008 11:37:40 +0000 (11:37 +0000)
committerRoger Dingledine <arma@torproject.org>
Thu, 5 Jun 2008 11:37:40 +0000 (11:37 +0000)
we actually have the descriptor listed in the consensus, not just
any descriptor, for each relay.

don't backport this patch (yet); who knows what it might do.

svn:r14971

src/or/routerlist.c

index b82f473c14553c37ce1ddeb0e33089aa518eeab1..a40bf3486771cfb69535ec468b31d567b466ceec 100644 (file)
@@ -4194,6 +4194,7 @@ update_router_have_minimum_dir_info(void)
   int res;
   or_options_t *options = get_options();
   routerinfo_t *ri;
+  signed_descriptor_t *sd;
   const networkstatus_t *consensus =
     networkstatus_get_reasonably_live_consensus(now);
 
@@ -4220,10 +4221,12 @@ update_router_have_minimum_dir_info(void)
      {
        if (client_would_use_router(rs, now, options)) {
          ++num_usable; /* the consensus says we want it. */
-         /* XXX021 shouldn't we look up by descriptor digest? */
-         ri = router_get_by_digest(rs->identity_digest);
-         if (ri) {
-           ++num_present; /* we have some descriptor for it. */
+         if ((sd = router_get_by_descriptor_digest(rs->descriptor_digest)) &&
+             (ri = router_get_by_digest(rs->identity_digest)) &&
+             !memcmp(ri->cache_info.signed_descriptor_digest,
+                     sd->signed_descriptor_digest, DIGEST_LEN)) {
+           /* we have the descriptor listed in the consensus. */
+           ++num_present;
            if (ri->is_running)
              ++num_running; /* our local status says it's still up. */
          }