Merge pull request #1427 from JacobBarthelmeh/Compatibility-Layer

return value on bad mutex with error nodes and add x509 host check to OPENSSL_EXTRA
This commit is contained in:
toddouska
2018-03-12 11:33:20 -07:00
committed by GitHub
4 changed files with 74 additions and 23 deletions

View File

@@ -12539,7 +12539,21 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
return ret;
}
#elif (defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE))
return wc_PullErrorNode(NULL, NULL, NULL);
{
int ret = wc_PullErrorNode(NULL, NULL, NULL);
if (ret < 0) {
if (ret == BAD_STATE_E) return 0; /* no errors in queue */
WOLFSSL_MSG("Error with pulling error node!");
WOLFSSL_LEAVE("wolfSSL_ERR_get_error", ret);
ret = 0 - ret; /* return absolute value of error */
/* panic and try to clear out nodes */
wc_ClearErrorNodes();
}
return (unsigned long)ret;
}
#else
return (unsigned long)(0 - NOT_COMPILED_IN);
#endif
@@ -14867,8 +14881,13 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
#ifdef DEBUG_WOLFSSL
int ret = wc_PullErrorNode(file, NULL, line);
if (ret < 0) {
if (ret == BAD_STATE_E) return 0; /* no errors in queue */
WOLFSSL_MSG("Issue getting error node");
return 0;
WOLFSSL_LEAVE("wolfSSL_ERR_get_error_line", ret);
ret = 0 - ret; /* return absolute value of error */
/* panic and try to clear out nodes */
wc_ClearErrorNodes();
}
return (unsigned long)ret;
#else
@@ -14953,20 +14972,44 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
* data output data. Is a string if ERR_TXT_STRING flag is used
* flags bit flag to adjust data output
*
* Returns the error value
* Returns the error value or 0 if no errors are in the queue
*/
unsigned long wolfSSL_ERR_get_error_line_data(const char** file, int* line,
const char** data, int *flags)
{
int ret;
WOLFSSL_STUB("wolfSSL_ERR_get_error_line_data");
if (flags != NULL) {
if ((*flags & ERR_TXT_STRING) == ERR_TXT_STRING) {
return wc_PullErrorNode(file, data, line);
ret = wc_PullErrorNode(file, data, line);
if (ret < 0) {
if (ret == BAD_STATE_E) return 0; /* no errors in queue */
WOLFSSL_MSG("Error with pulling error node!");
WOLFSSL_LEAVE("wolfSSL_ERR_get_error_line_data", ret);
ret = 0 - ret; /* return absolute value of error */
/* panic and try to clear out nodes */
wc_ClearErrorNodes();
}
return (unsigned long)ret;
}
}
return wc_PullErrorNode(file, NULL, line);
ret = wc_PullErrorNode(file, NULL, line);
if (ret < 0) {
if (ret == BAD_STATE_E) return 0; /* no errors in queue */
WOLFSSL_MSG("Error with pulling error node!");
WOLFSSL_LEAVE("wolfSSL_ERR_get_error_line_data", ret);
ret = 0 - ret; /* return absolute value of error */
/* panic and try to clear out nodes */
wc_ClearErrorNodes();
}
return (unsigned long)ret;
}
@@ -32010,7 +32053,7 @@ void wolfSSL_OPENSSL_config(char *config_name)
#endif
#endif
#if defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
#if defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) || defined(OPENSSL_EXTRA)
int wolfSSL_X509_get_ex_new_index(int idx, void *arg, void *a, void *b, void *c)
{
static int x509_idx = 0;
@@ -32146,9 +32189,21 @@ int wolfSSL_SSL_do_handshake(WOLFSSL *s)
if (s == NULL)
return WOLFSSL_FAILURE;
if (s->options.side == WOLFSSL_CLIENT_END)
if (s->options.side == WOLFSSL_CLIENT_END) {
#ifndef NO_WOLFSSL_CLIENT
return wolfSSL_connect(s);
#else
WOLFSSL_MSG("Client not compiled in");
return WOLFSSL_FAILURE;
#endif
}
#ifndef NO_WOLFSSL_SERVER
return wolfSSL_accept(s);
#else
WOLFSSL_MSG("Server not compiled in");
return WOLFSSL_FAILURE;
#endif
}
int wolfSSL_SSL_in_init(WOLFSSL *s)
@@ -32274,7 +32329,7 @@ int wolfSSL_i2a_ASN1_INTEGER(BIO *bp, const WOLFSSL_ASN1_INTEGER *a)
}
#ifdef HAVE_SESSION_TICKET
#if defined(HAVE_SESSION_TICKET) && !defined(NO_WOLFSSL_SERVER)
/* Expected return values from implementations of OpenSSL ticket key callback.
*/
#define TICKET_KEY_CB_RET_FAILURE -1
@@ -32391,6 +32446,9 @@ int wolfSSL_CTX_set_tlsext_ticket_key_cb(WOLFSSL_CTX *ctx, int (*cb)(
}
#endif /* HAVE_SESSION_TICKET */
#endif /* WOLFSSL_NGINX || WOLFSSL_HAPROXY || OPENSSL_EXTRA */
#if defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
#ifdef HAVE_OCSP
/* Not an OpenSSL API. */
int wolfSSL_get_ocsp_response(WOLFSSL* ssl, byte** response)
@@ -32414,7 +32472,9 @@ int wolfSSL_set_ocsp_url(WOLFSSL* ssl, char* url)
ssl->url = url;
return WOLFSSL_SUCCESS;
}
#endif /* WOLFSSL_NGINX || WOLFSSL_HAPROXY */
#if defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) || defined(OPENSSL_EXTRA)
int wolfSSL_CTX_get_extra_chain_certs(WOLFSSL_CTX* ctx, WOLF_STACK_OF(X509)** chain)
{
word32 idx;

View File

@@ -15844,6 +15844,7 @@ static void test_wolfSSL_ERR_put_error(void)
file = NULL;
AssertIntEQ(ERR_get_error_line(&file, &line), 0);
AssertNull(file);
AssertIntEQ(ERR_get_error_line_data(&file, &line, NULL, NULL), 0);
/* Empty and free up all error nodes */
ERR_clear_error();

View File

@@ -32,21 +32,9 @@
extern "C" {
#endif
#if !defined(NO_RSA) && !defined(HAVE_USER_RSA)
#if defined(HAVE_FIPS) || \
(defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION < 2))
/*
choice of padding added after fips, so not available when using fips RSA
*/
/* Padding types */
#define RSA_PKCS1_PADDING 0
#define RSA_PKCS1_OAEP_PADDING 1
#else
#define RSA_PKCS1_PADDING WC_RSA_PKCSV15_PAD
#define RSA_PKCS1_OAEP_PADDING WC_RSA_OAEP_PAD
#endif /* HAVE_FIPS */
#endif
/* Padding types */
#define RSA_PKCS1_PADDING 0
#define RSA_PKCS1_OAEP_PADDING 1
#ifndef WOLFSSL_RSA_TYPE_DEFINED /* guard on redeclaration */
typedef struct WOLFSSL_RSA WOLFSSL_RSA;

View File

@@ -2737,7 +2737,9 @@ WOLFSSL_LOCAL int wolfSSL_get_ocsp_response(WOLFSSL* ssl, byte** response);
WOLFSSL_LOCAL char* wolfSSL_get_ocsp_url(WOLFSSL* ssl);
/* Not an OpenSSL API. */
WOLFSSL_API int wolfSSL_set_ocsp_url(WOLFSSL* ssl, char* url);
#endif
#if defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) || defined(OPENSSL_EXTRA)
WOLFSSL_API WOLF_STACK_OF(WOLFSSL_CIPHER) *wolfSSL_get_ciphers_compat(const WOLFSSL *ssl);
WOLFSSL_API int wolfSSL_X509_get_ex_new_index(int idx, void *arg, void *a,
void *b, void *c);