/* Copyright (c) 2009-2016 Dovecot authors, see the included COPYING file */
#include "lib.h"
+#include "str.h"
#include "iostream-openssl.h"
#include <openssl/x509v3.h>
const char *openssl_iostream_error(void)
{
+ string_t *errstr = NULL;
unsigned long err;
- const char *data;
+ const char *data, *final_error;
int flags;
while ((err = ERR_get_error_line_data(NULL, NULL, &data, &flags)) != 0) {
i_fatal_status(FATAL_OUTOFMEM, "OpenSSL malloc() failed");
if (ERR_peek_error() == 0)
break;
- i_error("SSL: Stacked error: %s",
- ssl_err2str(err, data, flags));
+ if (errstr == NULL)
+ errstr = t_str_new(128);
+ else
+ str_append(errstr, ", ");
+ str_append(errstr, ssl_err2str(err, data, flags));
}
if (err == 0) {
if (errno != 0)
- return strerror(errno);
- return "Unknown error";
+ final_error = strerror(errno);
+ else
+ final_error = "Unknown error";
+ } else {
+ final_error = ssl_err2str(err, data, flags);
+ }
+ if (errstr == NULL)
+ return final_error;
+ else {
+ str_printfa(errstr, ", %s", final_error);
+ return str_c(errstr);
}
- return ssl_err2str(err, data, flags);
}
const char *openssl_iostream_key_load_error(void)