mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Change an assertion into a warning in connection_or_handle_event_cb()
Possibly addresses bug 4873, though IMO that's likely not a real bug: it seems likely to have been an ssl version mismatch.
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
o Minor bugfixes:
|
||||||
|
- Turn an assertion (that the number of handshakes received as a
|
||||||
|
server is not < 1) into a warning. Bug 4873.
|
||||||
+16
-12
@@ -1286,27 +1286,31 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
|
|||||||
return; /* ???? */
|
return; /* ???? */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (tor_tls_get_num_server_handshakes(conn->tls) == 1) {
|
|
||||||
/* v2 or v3 handshake, as a server. Only got one handshake, so
|
|
||||||
* wait for the next one. */
|
|
||||||
tor_tls_set_renegotiate_callback(conn->tls,
|
|
||||||
connection_or_tls_renegotiated_cb,
|
|
||||||
conn);
|
|
||||||
conn->_base.state = OR_CONN_STATE_TLS_SERVER_RENEGOTIATING;
|
|
||||||
/* return 0; */
|
|
||||||
return; /* ???? */
|
|
||||||
} else {
|
} else {
|
||||||
const int handshakes = tor_tls_get_num_server_handshakes(conn->tls);
|
const int handshakes = tor_tls_get_num_server_handshakes(conn->tls);
|
||||||
tor_assert(handshakes >= 2);
|
|
||||||
if (handshakes == 2) {
|
if (handshakes == 1) {
|
||||||
|
/* v2 or v3 handshake, as a server. Only got one handshake, so
|
||||||
|
* wait for the next one. */
|
||||||
|
tor_tls_set_renegotiate_callback(conn->tls,
|
||||||
|
connection_or_tls_renegotiated_cb,
|
||||||
|
conn);
|
||||||
|
conn->_base.state = OR_CONN_STATE_TLS_SERVER_RENEGOTIATING;
|
||||||
|
/* return 0; */
|
||||||
|
return; /* ???? */
|
||||||
|
} else if (handshakes == 2) {
|
||||||
/* v2 handshake, as a server. Two handshakes happened already,
|
/* v2 handshake, as a server. Two handshakes happened already,
|
||||||
* so we treat renegotiation as done.
|
* so we treat renegotiation as done.
|
||||||
*/
|
*/
|
||||||
connection_or_tls_renegotiated_cb(conn->tls, conn);
|
connection_or_tls_renegotiated_cb(conn->tls, conn);
|
||||||
} else {
|
} else if (handshakes > 2) {
|
||||||
log_warn(LD_OR, "More than two handshakes done on connection. "
|
log_warn(LD_OR, "More than two handshakes done on connection. "
|
||||||
"Closing.");
|
"Closing.");
|
||||||
connection_mark_for_close(TO_CONN(conn));
|
connection_mark_for_close(TO_CONN(conn));
|
||||||
|
} else {
|
||||||
|
log_warn(LD_BUG, "We were unexpectedly unexpectedly told that "
|
||||||
|
"a connection got %d handshakes. Closing.", handshakes);
|
||||||
|
connection_mark_for_close(TO_CONN(conn));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user