Преглед изворни кода

patch from karsten to not use or accept expired certs. fixes bug 851.

svn:r17208
Nick Mathewson пре 15 година
родитељ
комит
a15bdd3edd
3 измењених фајлова са 8 додато и 1 уклоњено
  1. 2 0
      ChangeLog
  2. 4 0
      src/or/dirvote.c
  3. 2 1
      src/or/networkstatus.c

+ 2 - 0
ChangeLog

@@ -12,6 +12,8 @@ Changes in version 0.2.1.7-alpha - 2008-11-07
       detailed logging on credential switching, set CREDENTIAL_LOG_LEVEL
       in common/compat.c to LOG_NOTICE or higher. Patch by Jacob Appelbaum
       and Steven Murdoch.
+    - Do not use or believe expired certificates.  Patch from Karsten.
+      Fixes bug 851.
 
   o Minor features:
     - Now NodeFamily and MyFamily config options allow spaces in

+ 4 - 0
src/or/dirvote.c

@@ -1568,6 +1568,7 @@ dirvote_perform_vote(void)
   networkstatus_t *ns;
   char *contents;
   pending_vote_t *pending_vote;
+  time_t now = time(NULL);
 
   int status;
   const char *msg = "";
@@ -1575,6 +1576,9 @@ dirvote_perform_vote(void)
   if (!cert || !key) {
     log_warn(LD_NET, "Didn't find key/certificate to generate v3 vote");
     return -1;
+  } else if (now < cert->expires) {
+    log_warn(LD_NET, "Can't generate v3 vote with expired certificate");
+    return -1;
   }
   if (!(ns = dirserv_generate_networkstatus_vote_obj(key, cert)))
     return -1;

+ 2 - 1
src/or/networkstatus.c

@@ -387,6 +387,7 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
   smartlist_t *unrecognized = smartlist_create();
   smartlist_t *missing_authorities = smartlist_create();
   int severity;
+  time_t now = time(NULL);
 
   tor_assert(consensus->type == NS_TYPE_CONSENSUS);
 
@@ -403,7 +404,7 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
         smartlist_add(unrecognized, voter);
         ++n_unknown;
         continue;
-      } else if (!cert) {
+      } else if (!cert || now > cert->expires) {
         smartlist_add(need_certs_from, voter);
         ++n_missing_key;
         continue;