瀏覽代碼

Defense in depth: fix the reachability bug a second way too.

Now if we establish a connection with the right digest, regardless
of what the addr/port is, and we have pending create cells, use it.


svn:r6614
Roger Dingledine 19 年之前
父節點
當前提交
279e86f3c8
共有 1 個文件被更改,包括 2 次插入10 次删除
  1. 2 10
      src/or/circuitbuild.c

+ 2 - 10
src/or/circuitbuild.c

@@ -420,16 +420,8 @@ circuit_n_conn_done(connection_t *or_conn, int status)
       continue;
     tor_assert(circ->state == CIRCUIT_STATE_OR_WAIT);
     if (!circ->n_conn &&
-        circ->n_addr == or_conn->addr &&
-        circ->n_port == or_conn->port) {
-      if (memcmp(or_conn->identity_digest, circ->n_conn_id_digest,
-                 DIGEST_LEN)) {
-        log_fn(LOG_PROTOCOL_WARN, LD_CIRC,
-               "Pending circuit to %s:%d is intended for different digest!",
-               or_conn->address, or_conn->port);
-        circuit_mark_for_close(circ, END_CIRC_REASON_OR_IDENTITY);
-        continue;
-      }
+        !memcmp(or_conn->identity_digest, circ->n_conn_id_digest,
+                DIGEST_LEN)) {
       if (!status) { /* or_conn failed; close circ */
         log_info(LD_CIRC,"or_conn failed. Closing circ.");
         circuit_mark_for_close(circ, END_CIRC_REASON_OR_CONN_CLOSED);