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:
Nick Mathewson 2012-05-24 11:14:28 -04:00
parent 466276faa5
commit 6b7c3b42ee
2 changed files with 19 additions and 12 deletions

3
changes/bug4873 Normal file
View File

@ -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.

View File

@ -1286,27 +1286,31 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
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 {
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,
* so we treat renegotiation as done.
*/
connection_or_tls_renegotiated_cb(conn->tls, conn);
} else {
} else if (handshakes > 2) {
log_warn(LD_OR, "More than two handshakes done on connection. "
"Closing.");
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;
}