scream louder if you've got a pending circuit for a given

addr/port but the intended n_conn digest is wrong.


svn:r6544
This commit is contained in:
Roger Dingledine 2006-06-05 09:47:19 +00:00
parent 45065f1466
commit a2fec314b6

View File

@ -418,9 +418,15 @@ circuit_n_conn_done(connection_t *or_conn, int status)
tor_assert(circ->state == CIRCUIT_STATE_OR_WAIT); tor_assert(circ->state == CIRCUIT_STATE_OR_WAIT);
if (!circ->n_conn && if (!circ->n_conn &&
circ->n_addr == or_conn->addr && circ->n_addr == or_conn->addr &&
circ->n_port == or_conn->port && circ->n_port == or_conn->port) {
!memcmp(or_conn->identity_digest, circ->n_conn_id_digest, if (memcmp(or_conn->identity_digest, circ->n_conn_id_digest,
DIGEST_LEN)) { 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;
}
if (!status) { /* or_conn failed; close circ */ if (!status) { /* or_conn failed; close circ */
log_info(LD_CIRC,"or_conn failed. Closing circ."); log_info(LD_CIRC,"or_conn failed. Closing circ.");
circuit_mark_for_close(circ, END_CIRC_REASON_OR_CONN_CLOSED); circuit_mark_for_close(circ, END_CIRC_REASON_OR_CONN_CLOSED);