mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-25 15:08:53 +00:00
Merge "res_xmpp: Try to provide useful errors messages from OpenSSL"
This commit is contained in:
@@ -2629,12 +2629,31 @@ static int xmpp_client_request_tls(struct ast_xmpp_client *client, struct ast_xm
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_OPENSSL
|
||||||
|
static char *openssl_error_string(void)
|
||||||
|
{
|
||||||
|
char *buf = NULL, *ret;
|
||||||
|
size_t len;
|
||||||
|
BIO *bio = BIO_new(BIO_s_mem());
|
||||||
|
|
||||||
|
ERR_print_errors(bio);
|
||||||
|
len = BIO_get_mem_data(bio, &buf);
|
||||||
|
ret = ast_calloc(1, len + 1);
|
||||||
|
if (ret) {
|
||||||
|
memcpy(ret, buf, len);
|
||||||
|
}
|
||||||
|
BIO_free(bio);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*! \brief Internal function called when we receive a response to our TLS initiation request */
|
/*! \brief Internal function called when we receive a response to our TLS initiation request */
|
||||||
static int xmpp_client_requested_tls(struct ast_xmpp_client *client, struct ast_xmpp_client_config *cfg, int type, iks *node)
|
static int xmpp_client_requested_tls(struct ast_xmpp_client *client, struct ast_xmpp_client_config *cfg, int type, iks *node)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_OPENSSL
|
#ifdef HAVE_OPENSSL
|
||||||
int sock;
|
int sock;
|
||||||
long ssl_opts;
|
long ssl_opts;
|
||||||
|
char *err;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!strcmp(iks_name(node), "success")) {
|
if (!strcmp(iks_name(node), "success")) {
|
||||||
@@ -2690,7 +2709,10 @@ static int xmpp_client_requested_tls(struct ast_xmpp_client *client, struct ast_
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
failure:
|
failure:
|
||||||
ast_log(LOG_ERROR, "TLS connection for client '%s' cannot be established. OpenSSL initialization failed.\n", client->name);
|
err = openssl_error_string();
|
||||||
|
ast_log(LOG_ERROR, "TLS connection for client '%s' cannot be established. "
|
||||||
|
"OpenSSL initialization failed: %s\n", client->name, err);
|
||||||
|
ast_free(err);
|
||||||
return -1;
|
return -1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user