]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Log more loudly on a bad cert from an authority.
authorNick Mathewson <nickm@torproject.org>
Thu, 3 Nov 2011 17:01:59 +0000 (13:01 -0400)
committerNick Mathewson <nickm@torproject.org>
Sun, 20 Nov 2011 05:48:25 +0000 (00:48 -0500)
Clock skew made this situation way too frequent so we demoted it to
"protocol_warn", but when there's an authority, it should really just
be warn.

changes/bug4370 [new file with mode: 0644]
src/or/command.c

diff --git a/changes/bug4370 b/changes/bug4370
new file mode 100644 (file)
index 0000000..168ec91
--- /dev/null
@@ -0,0 +1,4 @@
+  o Minor bugfixes:
+    - Log less loudly when we get an invalid certificate from a source other
+      than a directory authority: it's not unusual to see invalid certs
+      because of clock skew. Fixes bug 4370; bugfix on 0.2.3.6-alpha.
index a963d4210b0de75d2043a0bc9c4666ba449398ab..535c2ef4359124cf4ec3602f6ed19f0c3968d41e 100644 (file)
@@ -985,15 +985,24 @@ command_process_cert_cell(var_cell_t *cell, or_connection_t *conn)
   }
 
   if (conn->handshake_state->started_here) {
+    int severity;
     if (! (id_cert && link_cert))
       ERR("The certs we wanted were missing");
     /* Okay. We should be able to check the certificates now. */
     if (! tor_tls_cert_matches_key(conn->tls, link_cert)) {
       ERR("The link certificate didn't match the TLS public key");
     }
-    if (! tor_tls_cert_is_valid(LOG_PROTOCOL_WARN, link_cert, id_cert, 0))
+    /* Note that this warns more loudly about time and validity if we were
+    * _trying_ to connect to an authority, not necessarily if we _did_ connect
+    * to one. */
+    if (router_digest_is_trusted_dir(conn->identity_digest))
+      severity = LOG_WARN;
+    else
+      severity = LOG_PROTOCOL_WARN;
+
+    if (! tor_tls_cert_is_valid(severity, link_cert, id_cert, 0))
       ERR("The link certificate was not valid");
-    if (! tor_tls_cert_is_valid(LOG_PROTOCOL_WARN, id_cert, id_cert, 1))
+    if (! tor_tls_cert_is_valid(severity, id_cert, id_cert, 1))
       ERR("The ID certificate was not valid");
 
     conn->handshake_state->authenticated = 1;