瀏覽代碼

Clean up some more fingerprint-checking logic

svn:r4954
Nick Mathewson 20 年之前
父節點
當前提交
d410c49965
共有 2 個文件被更改,包括 9 次插入3 次删除
  1. 4 0
      src/or/directory.c
  2. 5 3
      src/or/routerlist.c

+ 4 - 0
src/or/directory.c

@@ -899,8 +899,12 @@ connection_dir_client_reached_eof(connection_t *conn)
     }
     if (conn->requested_resource &&
         !strcmpstart(conn->requested_resource,"fp/")) {
+      int n;
       which = smartlist_create();
       smartlist_split_string(which, conn->requested_resource+3, "+", 0, -1);
+      n = smartlist_len(which);
+      if (n && strlen(smartlist_get(which,n-1))==HEX_DIGEST_LEN+2)
+        ((char*)smartlist_get(which,n-1))[HEX_DIGEST_LEN] = '\0';
     }
     cp = body;
     while (*cp) {

+ 5 - 3
src/or/routerlist.c

@@ -1247,7 +1247,9 @@ router_set_networkstatus(const char *s, time_t arrived_at,
 
   if (requested_fingerprints &&
       !smartlist_string_isin(requested_fingerprints, fp)) {
-    log_fn(LOG_WARN, "We received a network status with a fingerprint (%s) that we never requested. Dropping.", fp);
+    char *requested = smartlist_join_strings(requested_fingerprints," ",0,NULL);
+    log_fn(LOG_WARN, "We received a network status with a fingerprint (%s) that we never requested. (%s) Dropping.", fp, requested);
+    tor_free(requested);
     return 0;
   }
 
@@ -1333,7 +1335,6 @@ update_networkstatus_cache_downloads(time_t now)
   }
 }
 
-
 /*XXXX Should these be configurable? NM*/
 /** How old (in seconds) can a network-status be before we stop believing it? */
 #define NETWORKSTATUS_MAX_VALIDITY (48*60*60)
@@ -1405,8 +1406,9 @@ update_networkstatus_client_downloads(time_t now)
     ds = smartlist_get(trusted_dir_servers, i);
     base16_encode(cp, HEX_DIGEST_LEN+1, ds->digest, DIGEST_LEN);
     cp += HEX_DIGEST_LEN;
-    *cp++ = '+';
     --needed;
+    if (needed)
+      *cp++ = '+';
   }
   memcpy(cp, ".z", 3);
   directory_get_from_dirserver(DIR_PURPOSE_FETCH_NETWORKSTATUS, resource, 1);