diff options
Diffstat (limited to 'sockets.c')
-rw-r--r-- | sockets.c | 19 |
1 files changed, 16 insertions, 3 deletions
@@ -173,9 +173,9 @@ SSL_CTX *create_openssl_context(int type) { ctx = SSL_CTX_new(method); if (!ctx) { - perror("Unable to create SSL context"); - ERR_print_errors_fp(stderr); - debugprint(DEBUG_CRIT, "Unable to create SSL context, errno '%d'.\n", errno); + char* errstr = openssl_error_string(); + debugprint(DEBUG_CRIT, "Unable to create SSL context, errno '%d', type '%d' - %s", errno, type, errstr); + if (errstr != NULL) free(errstr); exit(EXIT_FAILURE); } @@ -227,3 +227,16 @@ int socksend(SSL *fd, char *buf, int bufsize, int tls) { return send((long int)fd, buf, bufsize, 0); } } + +char *openssl_error_string() { + BIO *bio = BIO_new (BIO_s_mem ()); + ERR_print_errors (bio); + char *buf = NULL; + size_t len = BIO_get_mem_data (bio, &buf); + char *ret = (char *)calloc(1, 1 + len); + if (ret) { + memcpy(ret, buf, len); + } + BIO_free (bio); + return ret; +} |