Make the bufferevent code use the renegotiation-reenabling hack

This commit is contained in:
Nick Mathewson 2010-09-27 16:07:14 -04:00
parent 21e5f3c431
commit 6950749c0a
3 changed files with 4 additions and 2 deletions

View File

@ -195,7 +195,6 @@ static X509* tor_tls_create_certificate(crypto_pk_env_t *rsa,
const char *cname, const char *cname,
const char *cname_sign, const char *cname_sign,
unsigned int lifetime); unsigned int lifetime);
static void tor_tls_unblock_renegotiation(tor_tls_t *tls);
/** Global tls context. We keep it here because nobody else needs to /** Global tls context. We keep it here because nobody else needs to
* touch it. */ * touch it. */
@ -1032,7 +1031,7 @@ tor_tls_set_renegotiate_callback(tor_tls_t *tls,
/** If this version of openssl requires it, turn on renegotiation on /** If this version of openssl requires it, turn on renegotiation on
* <b>tls</b>. * <b>tls</b>.
*/ */
static void void
tor_tls_unblock_renegotiation(tor_tls_t *tls) tor_tls_unblock_renegotiation(tor_tls_t *tls)
{ {
/* Yes, we know what we are doing here. No, we do not treat a renegotiation /* Yes, we know what we are doing here. No, we do not treat a renegotiation

View File

@ -66,6 +66,7 @@ int tor_tls_write(tor_tls_t *tls, const char *cp, size_t n);
int tor_tls_handshake(tor_tls_t *tls); int tor_tls_handshake(tor_tls_t *tls);
int tor_tls_finish_handshake(tor_tls_t *tls); int tor_tls_finish_handshake(tor_tls_t *tls);
int tor_tls_renegotiate(tor_tls_t *tls); int tor_tls_renegotiate(tor_tls_t *tls);
void tor_tls_unblock_renegotiation(tor_tls_t *tls);
void tor_tls_block_renegotiation(tor_tls_t *tls); void tor_tls_block_renegotiation(tor_tls_t *tls);
int tor_tls_shutdown(tor_tls_t *tls); int tor_tls_shutdown(tor_tls_t *tls);
int tor_tls_get_pending_bytes(tor_tls_t *tls); int tor_tls_get_pending_bytes(tor_tls_t *tls);

View File

@ -1019,10 +1019,12 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
if (!tor_tls_is_server(conn->tls)) { if (!tor_tls_is_server(conn->tls)) {
if (conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING) { if (conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING) {
conn->_base.state = OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING; conn->_base.state = OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING;
tor_tls_unblock_renegotiation(conn->tls);
if (bufferevent_ssl_renegotiate(conn->_base.bufev)<0) { if (bufferevent_ssl_renegotiate(conn->_base.bufev)<0) {
log_warn(LD_OR, "Start_renegotiating went badly."); log_warn(LD_OR, "Start_renegotiating went badly.");
connection_mark_for_close(TO_CONN(conn)); connection_mark_for_close(TO_CONN(conn));
} }
tor_tls_unblock_renegotiation(conn->tls);
return; /* ???? */ return; /* ???? */
} }
} else { } else {