error put function

This commit is contained in:
Jacob Barthelmeh
2017-01-21 17:43:43 -07:00
parent 704d765501
commit e391931711
4 changed files with 179 additions and 0 deletions

View File

@@ -14220,6 +14220,94 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
#endif
}
unsigned long wolfSSL_ERR_get_error_line(const char** file, int* line)
{
#ifdef DEBUG_WOLFSSL
if (file != NULL) {
*file = (const char*)wc_last_error_file;
}
if (line != NULL) {
*line = (int)wc_last_error_line;
}
return wc_last_error;
#else
(void)file;
(void)line;
return 0;
#endif
}
#ifdef DEBUG_WOLFSSL
static const char WOLFSSL_SYS_ACCEPT_T[] = "accept";
static const char WOLFSSL_SYS_BIND_T[] = "bind";
static const char WOLFSSL_SYS_CONNECT_T[] = "connect";
static const char WOLFSSL_SYS_FOPEN_T[] = "fopen";
static const char WOLFSSL_SYS_FREAD_T[] = "fread";
static const char WOLFSSL_SYS_GETADDRINFO_T[] = "getaddrinfo";
static const char WOLFSSL_SYS_GETSOCKOPT_T[] = "getsockopt";
static const char WOLFSSL_SYS_GETSOCKNAME_T[] = "getsockname";
static const char WOLFSSL_SYS_GETHOSTBYNAME_T[] = "gethostbyname";
static const char WOLFSSL_SYS_GETNAMEINFO_T[] = "getnameinfo";
static const char WOLFSSL_SYS_GETSERVBYNAME_T[] = "getservbyname";
static const char WOLFSSL_SYS_IOCTLSOCKET_T[] = "ioctlsocket";
static const char WOLFSSL_SYS_LISTEN_T[] = "listen";
static const char WOLFSSL_SYS_OPENDIR_T[] = "opendir";
static const char WOLFSSL_SYS_SETSOCKOPT_T[] = "setsockopt";
static const char WOLFSSL_SYS_SOCKET_T[] = "socket";
/* switch with int mapped to function name for compatibility */
static const char* wolfSSL_ERR_sys_func(int fun)
{
switch (fun) {
case WOLFSSL_SYS_ACCEPT: return WOLFSSL_SYS_ACCEPT_T;
case WOLFSSL_SYS_BIND: return WOLFSSL_SYS_BIND_T;
case WOLFSSL_SYS_CONNECT: return WOLFSSL_SYS_CONNECT_T;
case WOLFSSL_SYS_FOPEN: return WOLFSSL_SYS_FOPEN_T;
case WOLFSSL_SYS_FREAD: return WOLFSSL_SYS_FREAD_T;
case WOLFSSL_SYS_GETADDRINFO: return WOLFSSL_SYS_GETADDRINFO_T;
case WOLFSSL_SYS_GETSOCKOPT: return WOLFSSL_SYS_GETSOCKOPT_T;
case WOLFSSL_SYS_GETSOCKNAME: return WOLFSSL_SYS_GETSOCKNAME_T;
case WOLFSSL_SYS_GETHOSTBYNAME: return WOLFSSL_SYS_GETHOSTBYNAME_T;
case WOLFSSL_SYS_GETNAMEINFO: return WOLFSSL_SYS_GETNAMEINFO_T;
case WOLFSSL_SYS_GETSERVBYNAME: return WOLFSSL_SYS_GETSERVBYNAME_T;
case WOLFSSL_SYS_IOCTLSOCKET: return WOLFSSL_SYS_IOCTLSOCKET_T;
case WOLFSSL_SYS_LISTEN: return WOLFSSL_SYS_LISTEN_T;
case WOLFSSL_SYS_OPENDIR: return WOLFSSL_SYS_OPENDIR_T;
case WOLFSSL_SYS_SETSOCKOPT: return WOLFSSL_SYS_SETSOCKOPT_T;
case WOLFSSL_SYS_SOCKET: return WOLFSSL_SYS_SOCKET_T;
default:
return "NULL";
}
}
#endif /* DEBUG_WOLFSSL */
/* @TODO when having an error queue this needs to push to the queue */
void wolfSSL_ERR_put_error(int lib, int fun, int err, const char* file,
int line)
{
WOLFSSL_ENTER("wolfSSL_ERR_put_error");
#ifndef DEBUG_WOLFSSL
(void)fun;
(void)err;
(void)file;
(void)line;
WOLFSSL_MSG("Not compiled in debug mode");
#else
WOLFSSL_ERROR_LINE(err, wolfSSL_ERR_sys_func(fun), (unsigned int)line,
file, NULL);
#endif
(void)lib;
}
unsigned long wolfSSL_ERR_get_error_line_data(const char** file, int* line,
const char** data, int *flags)
{
@@ -14228,6 +14316,8 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
(void)line;
(void)data;
(void)flags;
WOLFSSL_STUB("wolfSSL_ERR_get_error_line_data");
return 0;
}

View File

@@ -14814,6 +14814,52 @@ static void test_wolfSSL_pkcs8(void)
}
static void test_wolfSSL_ERR_put_error(void)
{
#if defined(OPENSSL_EXTRA) && defined(DEBUG_WOLFSSL)
const char* file;
int line;
printf(testingFmt, "wolfSSL_ERR_put_error()");
ERR_put_error(0,SYS_F_ACCEPT, 0, "this file", 0);
AssertIntEQ(ERR_get_error_line(&file, &line), 0);
ERR_put_error(0,SYS_F_BIND, 1, "this file", 1);
AssertIntEQ(ERR_get_error_line(&file, &line), 1);
ERR_put_error(0,SYS_F_CONNECT, 2, "this file", 2);
AssertIntEQ(ERR_get_error_line(&file, &line), 2);
ERR_put_error(0,SYS_F_FOPEN, 3, "this file", 3);
AssertIntEQ(ERR_get_error_line(&file, &line), 3);
ERR_put_error(0,SYS_F_FREAD, 4, "this file", 4);
AssertIntEQ(ERR_get_error_line(&file, &line), 4);
ERR_put_error(0,SYS_F_GETADDRINFO, 5, "this file", 5);
AssertIntEQ(ERR_get_error_line(&file, &line), 5);
ERR_put_error(0,SYS_F_GETSOCKOPT, 6, "this file", 6);
AssertIntEQ(ERR_get_error_line(&file, &line), 6);
ERR_put_error(0,SYS_F_GETSOCKNAME, 7, "this file", 7);
AssertIntEQ(ERR_get_error_line(&file, &line), 7);
ERR_put_error(0,SYS_F_GETHOSTBYNAME, 8, "this file", 8);
AssertIntEQ(ERR_get_error_line(&file, &line), 8);
ERR_put_error(0,SYS_F_GETNAMEINFO, 9, "this file", 9);
AssertIntEQ(ERR_get_error_line(&file, &line), 9);
ERR_put_error(0,SYS_F_GETSERVBYNAME, 10, "this file", 10);
AssertIntEQ(ERR_get_error_line(&file, &line), 10);
ERR_put_error(0,SYS_F_IOCTLSOCKET, 11, "this file", 11);
AssertIntEQ(ERR_get_error_line(&file, &line), 11);
ERR_put_error(0,SYS_F_LISTEN, 12, "this file", 12);
AssertIntEQ(ERR_get_error_line(&file, &line), 12);
ERR_put_error(0,SYS_F_OPENDIR, 13, "this file", 13);
AssertIntEQ(ERR_get_error_line(&file, &line), 13);
ERR_put_error(0,SYS_F_SETSOCKOPT, 14, "this file", 14);
AssertIntEQ(ERR_get_error_line(&file, &line), 14);
ERR_put_error(0,SYS_F_SOCKET, 15, "this file", 15);
AssertIntEQ(ERR_get_error_line(&file, &line), 15);
printf(resultFmt, passed);
#endif
}
static void test_no_op_functions(void)
{
#if defined(OPENSSL_EXTRA)
@@ -15613,6 +15659,7 @@ void ApiTest(void)
test_wolfSSL_CTX_set_srp_password();
test_wolfSSL_pseudo_rand();
test_wolfSSL_pkcs8();
test_wolfSSL_ERR_put_error();
/* test the no op functions for compatibility */
test_no_op_functions();

View File

@@ -429,6 +429,26 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
#define SSL_CTX_set_psk_server_callback wolfSSL_CTX_set_psk_server_callback
#define SSL_set_psk_server_callback wolfSSL_set_psk_server_callback
/* system file ints for ERR_put_error */
#define SYS_F_ACCEPT WOLFSSL_SYS_ACCEPT
#define SYS_F_BIND WOLFSSL_SYS_BIND
#define SYS_F_CONNECT WOLFSSL_SYS_CONNECT
#define SYS_F_FOPEN WOLFSSL_SYS_FOPEN
#define SYS_F_FREAD WOLFSSL_SYS_FREAD
#define SYS_F_GETADDRINFO WOLFSSL_SYS_GETADDRINFO
#define SYS_F_GETSOCKOPT WOLFSSL_SYS_GETSOCKOPT
#define SYS_F_GETSOCKNAME WOLFSSL_SYS_GETSOCKNAME
#define SYS_F_OPENDIR WOLFSSL_SYS_OPENDIR
#define SYS_F_SETSOCKOPT WOLFSSL_SYS_SETSOCKOPT
#define SYS_F_SOCKET WOLFSSL_SYS_SOCKET
#define SYS_F_GETHOSTBYNAME WOLFSSL_SYS_GETHOSTBYNAME
#define SYS_F_GETNAMEINFO WOLFSSL_SYS_GETNAMEINFO
#define SYS_F_GETSERVBYNAME WOLFSSL_SYS_GETSERVBYNAME
#define SYS_F_IOCTLSOCKET WOLFSSL_SYS_IOCTLSOCKET
#define SYS_F_LISTEN WOLFSSL_SYS_LISTEN
#define ERR_put_error wolfSSL_ERR_put_error
#define ERR_get_error_line wolfSSL_ERR_get_error_line
#define ERR_get_error_line_data wolfSSL_ERR_get_error_line_data
#define ERR_get_error wolfSSL_ERR_get_error

View File

@@ -1274,6 +1274,9 @@ enum {
#endif
WOLFSSL_API void wolfSSL_ERR_put_error(int lib, int fun, int err,
const char* file, int line);
WOLFSSL_API unsigned long wolfSSL_ERR_get_error_line(const char**, int*);
WOLFSSL_API unsigned long wolfSSL_ERR_get_error_line_data(const char**, int*,
const char**, int *);
@@ -2333,6 +2336,25 @@ WOLFSSL_API char* wolfSSL_ASN1_TIME_to_string(WOLFSSL_ASN1_TIME* time,
#ifdef OPENSSL_EXTRA
enum {
WOLFSSL_SYS_ACCEPT = 0,
WOLFSSL_SYS_BIND,
WOLFSSL_SYS_CONNECT,
WOLFSSL_SYS_FOPEN,
WOLFSSL_SYS_FREAD,
WOLFSSL_SYS_GETADDRINFO,
WOLFSSL_SYS_GETSOCKOPT,
WOLFSSL_SYS_GETSOCKNAME,
WOLFSSL_SYS_GETHOSTBYNAME,
WOLFSSL_SYS_GETNAMEINFO,
WOLFSSL_SYS_GETSERVBYNAME,
WOLFSSL_SYS_IOCTLSOCKET,
WOLFSSL_SYS_LISTEN,
WOLFSSL_SYS_OPENDIR,
WOLFSSL_SYS_SETSOCKOPT,
WOLFSSL_SYS_SOCKET
};
/* Object functions */
WOLFSSL_API const char * wolfSSL_OBJ_nid2sn(int n);
WOLFSSL_API int wolfSSL_OBJ_obj2nid(const WOLFSSL_ASN1_OBJECT *o);