Commit 4cfa6fba authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Log OpenSSL errors coming from bufferevent_openssl

parent 50d77ad4
Loading
Loading
Loading
Loading
+32 −22
Original line number Diff line number Diff line
@@ -224,24 +224,22 @@ ssl_state_to_string(int ssl_state)
  return buf;
}

/** 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)
void
tor_tls_log_one_error(tor_tls_t *tls, unsigned long err,
                  int severity, int domain, const char *doing)
{
  const char *state = NULL;
  const char *state = NULL, *addr;
  const char *msg, *lib, *func;
  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) {
  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 (!state)
      state = (st>=0)?ssl_state_to_string(st):"---";
  if (!msg) msg = "(null)";
  if (!lib) lib = "(null)";
  if (!func) func = "(null)";
@@ -255,6 +253,18 @@ tls_log_errors(tor_tls_t *tls, int severity, int domain, const char *doing)
        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)
{
  unsigned long err;

  while ((err = ERR_get_error()) != 0) {
    tor_tls_log_one_error(tls, err, severity, domain, doing);
  }
}

/** Convert an errno (or a WSAerrno on windows) into a TOR_TLS_* error
+8 −0
Original line number Diff line number Diff line
@@ -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