diff --git a/src/ocsp.c b/src/ocsp.c index 283eb03a8..559df5377 100644 --- a/src/ocsp.c +++ b/src/ocsp.c @@ -279,9 +279,9 @@ static int GetOcspStatus(WOLFSSL_OCSP* ocsp, OcspRequest* request, * entry The OCSP entry for this certificate. * returns OCSP_LOOKUP_FAIL when the response is bad and 0 otherwise. */ -WOLFSSL_LOCAL int CheckOcspResponse(WOLFSSL_OCSP *ocsp, byte *response, int responseSz, - WOLFSSL_BUFFER_INFO *responseBuffer, CertStatus *status, - OcspEntry *entry, OcspRequest *ocspRequest) +int CheckOcspResponse(WOLFSSL_OCSP *ocsp, byte *response, int responseSz, + WOLFSSL_BUFFER_INFO *responseBuffer, CertStatus *status, + OcspEntry *entry, OcspRequest *ocspRequest) { #ifdef WOLFSSL_SMALL_STACK CertStatus* newStatus; @@ -406,13 +406,17 @@ end: } /* 0 on success */ +/* allow user to override the maximum request size at build-time */ +#ifndef OCSP_MAX_REQUEST_SZ +#define OCSP_MAX_REQUEST_SZ 2048 +#endif int CheckOcspRequest(WOLFSSL_OCSP* ocsp, OcspRequest* ocspRequest, buffer* responseBuffer) { OcspEntry* entry = NULL; CertStatus* status = NULL; byte* request = NULL; - int requestSz = 2048; + int requestSz = OCSP_MAX_REQUEST_SZ; int responseSz = 0; byte* response = NULL; const char* url = NULL; @@ -1113,7 +1117,7 @@ WOLFSSL_OCSP_SINGLERESP* wolfSSL_OCSP_resp_get0(WOLFSSL_OCSP_BASICRESP *bs, int return single; } -#endif /* OPENSSL_ALL || APACHE_HTTPD */ +#endif /* OPENSSL_ALL || APACHE_HTTPD || WOLFSSL_HAPROXY */ #ifdef OPENSSL_EXTRA #ifndef NO_WOLFSSL_STUB diff --git a/src/wolfio.c b/src/wolfio.c index d159d35bd..24c21fa29 100644 --- a/src/wolfio.c +++ b/src/wolfio.c @@ -805,13 +805,14 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec) #ifdef HAVE_SOCKADDR int ret = 0; SOCKADDR_S addr; - int sockaddr_len = sizeof(SOCKADDR_IN); - /* use gethostbyname for c99 */ -#if defined(HAVE_GETADDRINFO) && !defined(WOLF_C99) + int sockaddr_len; +#if defined(HAVE_GETADDRINFO) + /* use getaddrinfo */ ADDRINFO hints; ADDRINFO* answer = NULL; char strPort[6]; #else + /* use gethostbyname */ #if !defined(WOLFSSL_USE_POPEN_HOST) #if defined(__GLIBC__) && (__GLIBC__ >= 2) && defined(__USE_MISC) && \ !defined(SINGLE_THREADED) @@ -822,13 +823,22 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec) HOSTENT *entry; #endif #endif +#ifdef WOLFSSL_IPV6 + SOCKADDR_IN6 *sin; +#else SOCKADDR_IN *sin; #endif +#endif /* HAVE_SOCKADDR */ if (sockfd == NULL || ip == NULL) { return -1; } +#ifdef WOLFSSL_IPV6 + sockaddr_len = sizeof(SOCKADDR_IN6); +#else + sockaddr_len = sizeof(SOCKADDR_IN); +#endif XMEMSET(&addr, 0, sizeof(addr)); #ifdef WOLFIO_DEBUG @@ -836,9 +846,9 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec) #endif /* use gethostbyname for c99 */ -#if defined(HAVE_GETADDRINFO) && !defined(WOLF_C99) +#if defined(HAVE_GETADDRINFO) XMEMSET(&hints, 0, sizeof(hints)); - hints.ai_family = AF_UNSPEC; + hints.ai_family = AF_UNSPEC; /* detect IPv4 or IPv6 */ hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; @@ -855,7 +865,7 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec) sockaddr_len = answer->ai_addrlen; XMEMCPY(&addr, answer->ai_addr, sockaddr_len); freeaddrinfo(answer); -#elif defined(WOLFSSL_USE_POPEN_HOST) +#elif defined(WOLFSSL_USE_POPEN_HOST) && !defined(WOLFSSL_IPV6) { char host_ipaddr[4] = { 127, 0, 0, 1 }; int found = 1; @@ -907,7 +917,6 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec) } if (found) { sin = (SOCKADDR_IN *)&addr; - sin->sin_family = AF_INET; sin->sin_port = XHTONS(port); XMEMCPY(&sin->sin_addr.s_addr, host_ipaddr, sizeof(host_ipaddr)); @@ -932,12 +941,19 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec) #else entry = gethostbyname(ip); #endif - sin = (SOCKADDR_IN *)&addr; if (entry) { + #ifdef WOLFSSL_IPV6 + sin = (SOCKADDR_IN6 *)&addr; + sin->sin6_family = AF_INET6; + sin->sin6_port = XHTONS(port); + XMEMCPY(&sin->sin6_addr, entry->h_addr_list[0], entry->h_length); + #else + sin = (SOCKADDR_IN *)&addr; sin->sin_family = AF_INET; sin->sin_port = XHTONS(port); XMEMCPY(&sin->sin_addr.s_addr, entry->h_addr_list[0], entry->h_length); + #endif } #if defined(__GLIBC__) && (__GLIBC__ >= 2) && defined(__USE_MISC) && \ diff --git a/wolfssl/test.h b/wolfssl/test.h index c48fd3741..37cc736f4 100644 --- a/wolfssl/test.h +++ b/wolfssl/test.h @@ -1312,7 +1312,7 @@ static WC_INLINE void build_addr(SOCKADDR_IN_T* addr, const char* peer, addr->sin6_addr = in6addr_any; } else { - #if defined(HAVE_GETADDRINFO) || defined(WOLF_C99) + #if defined(HAVE_GETADDRINFO) struct addrinfo hints; struct addrinfo* answer = NULL; int ret; diff --git a/wolfssl/wolfio.h b/wolfssl/wolfio.h index a4fe73f64..a7db0774c 100644 --- a/wolfssl/wolfio.h +++ b/wolfssl/wolfio.h @@ -373,8 +373,7 @@ typedef struct hostent HOSTENT; #endif /* HAVE_SOCKADDR */ - /* use gethostbyname for c99 */ - #if defined(HAVE_GETADDRINFO) && !defined(WOLF_C99) + #if defined(HAVE_GETADDRINFO) typedef struct addrinfo ADDRINFO; #endif #endif /* WOLFSSL_NO_SOCK */