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
This commit is contained in:
Roger Dingledine 2006-06-13 05:51:28 +00:00
parent a20a384b09
commit 279e86f3c8

View File

@ -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);