mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 13:43:47 +01:00
Log OpenSSL errors coming from bufferevent_openssl
This commit is contained in:
parent
50d77ad4b6
commit
4cfa6fbaca
@ -224,36 +224,46 @@ ssl_state_to_string(int ssl_state)
|
||||
return buf;
|
||||
}
|
||||
|
||||
void
|
||||
tor_tls_log_one_error(tor_tls_t *tls, unsigned long err,
|
||||
int severity, int domain, const char *doing)
|
||||
{
|
||||
const char *state = NULL, *addr;
|
||||
const char *msg, *lib, *func;
|
||||
int st;
|
||||
|
||||
st = (tls && tls->ssl) ? tls->ssl->state : -1;
|
||||
state = (st>=0)?ssl_state_to_string(st):"---";
|
||||
|
||||
addr = tls ? tls->address : NULL;
|
||||
|
||||
msg = (const char*)ERR_reason_error_string(err);
|
||||
lib = (const char*)ERR_lib_error_string(err);
|
||||
func = (const char*)ERR_func_error_string(err);
|
||||
if (!msg) msg = "(null)";
|
||||
if (!lib) lib = "(null)";
|
||||
if (!func) func = "(null)";
|
||||
if (doing) {
|
||||
log(severity, domain, "TLS error while %s%s%s: %s (in %s:%s:%s)",
|
||||
doing, addr?" with ":"", addr?addr:"",
|
||||
msg, lib, func, state);
|
||||
} else {
|
||||
log(severity, domain, "TLS error%s%s: %s (in %s:%s:%s)",
|
||||
addr?" with ":"", addr?addr:"",
|
||||
msg, lib, func, state);
|
||||
}
|
||||
}
|
||||
|
||||
/** Log all pending tls errors at level <b>severity</b>. Use
|
||||
* <b>doing</b> to describe our current activities.
|
||||
*/
|
||||
static void
|
||||
tls_log_errors(tor_tls_t *tls, int severity, int domain, const char *doing)
|
||||
{
|
||||
const char *state = NULL;
|
||||
int st;
|
||||
unsigned long err;
|
||||
const char *msg, *lib, *func, *addr;
|
||||
addr = tls ? tls->address : NULL;
|
||||
st = (tls && tls->ssl) ? tls->ssl->state : -1;
|
||||
|
||||
while ((err = ERR_get_error()) != 0) {
|
||||
msg = (const char*)ERR_reason_error_string(err);
|
||||
lib = (const char*)ERR_lib_error_string(err);
|
||||
func = (const char*)ERR_func_error_string(err);
|
||||
if (!state)
|
||||
state = (st>=0)?ssl_state_to_string(st):"---";
|
||||
if (!msg) msg = "(null)";
|
||||
if (!lib) lib = "(null)";
|
||||
if (!func) func = "(null)";
|
||||
if (doing) {
|
||||
log(severity, domain, "TLS error while %s%s%s: %s (in %s:%s:%s)",
|
||||
doing, addr?" with ":"", addr?addr:"",
|
||||
msg, lib, func, state);
|
||||
} else {
|
||||
log(severity, domain, "TLS error%s%s: %s (in %s:%s:%s)",
|
||||
addr?" with ":"", addr?addr:"",
|
||||
msg, lib, func, state);
|
||||
}
|
||||
tor_tls_log_one_error(tls, err, severity, domain, doing);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1050,6 +1050,14 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
|
||||
return;
|
||||
}
|
||||
|
||||
if (event & BEV_EVENT_ERROR) {
|
||||
unsigned long err;
|
||||
while ((err = bufferevent_get_openssl_error(bufev))) {
|
||||
tor_tls_log_one_error(conn->tls, err, LOG_WARN, LD_OR,
|
||||
"handshaking (with bufferevent)");
|
||||
}
|
||||
}
|
||||
|
||||
connection_handle_event_cb(bufev, event, arg);
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user