@@ -4509,7 +4509,11 @@ int wolfSSL_get_error(WOLFSSL* ssl, int ret)
45094509 return WOLFSSL_ERROR_WANT_WRITE; /* convert to OpenSSL type */
45104510 else if (ssl->error == ZERO_RETURN || ssl->options.shutdownDone)
45114511 return WOLFSSL_ERROR_ZERO_RETURN; /* convert to OpenSSL type */
4512- return ssl->error;
4512+ #if defined(WOLFSSL_HAPROXY)
4513+ return GetX509Error(ssl->error);
4514+ #else
4515+ return (ssl->error);
4516+ #endif
45134517}
45144518
45154519
@@ -8152,7 +8156,8 @@ int wolfSSL_CertManagerLoadCRLBuffer(WOLFSSL_CERT_MANAGER* cm,
81528156 return BAD_FUNC_ARG;
81538157
81548158 if (cm->crl == NULL) {
8155- if (wolfSSL_CertManagerEnableCRL(cm, 0) != WOLFSSL_SUCCESS) {
8159+ if (wolfSSL_CertManagerEnableCRL(cm, WOLFSSL_CRL_CHECK) !=
8160+ WOLFSSL_SUCCESS) {
81568161 WOLFSSL_MSG("Enable CRL failed");
81578162 return WOLFSSL_FATAL_ERROR;
81588163 }
@@ -8204,11 +8209,21 @@ int wolfSSL_CertManagerEnableCRL(WOLFSSL_CERT_MANAGER* cm, int options)
82048209{
82058210 int ret = WOLFSSL_SUCCESS;
82068211
8207- (void)options;
8208-
82098212 WOLFSSL_ENTER("wolfSSL_CertManagerEnableCRL");
82108213 if (cm == NULL)
82118214 return BAD_FUNC_ARG;
8215+ #if defined(OPENSSL_COMPATIBLE_DEFAULTS)
8216+ if (options == 0) {
8217+
8218+ /* Turn off doing Leaf CRL check */
8219+ cm->crlEnabled = 0;
8220+ /* Turn off all checks */
8221+ cm->crlCheckAll = 0;
8222+ return ret;
8223+ }
8224+ #else
8225+ (void)options;
8226+ #endif
82128227
82138228 #ifdef HAVE_CRL
82148229 if (cm->crl == NULL) {
@@ -8228,10 +8243,15 @@ int wolfSSL_CertManagerEnableCRL(WOLFSSL_CERT_MANAGER* cm, int options)
82288243 cm->crl->crlIOCb = EmbedCrlLookup;
82298244 #endif
82308245 }
8231-
8232- cm->crlEnabled = 1;
8233- if (options & WOLFSSL_CRL_CHECKALL)
8234- cm->crlCheckAll = 1;
8246+ #if defined(OPENSSL_COMPATIBLE_DEFAULTS)
8247+ if ((options & WOLFSSL_CRL_CHECKALL) ||
8248+ (options & WOLFSSL_CRL_CHECK))
8249+ #endif
8250+ {
8251+ cm->crlEnabled = 1;
8252+ if (options & WOLFSSL_CRL_CHECKALL)
8253+ cm->crlCheckAll = 1;
8254+ }
82358255 #else
82368256 ret = NOT_COMPILED_IN;
82378257 #endif
@@ -9431,7 +9451,8 @@ int wolfSSL_CertManagerLoadCRL(WOLFSSL_CERT_MANAGER* cm, const char* path,
94319451 return BAD_FUNC_ARG;
94329452
94339453 if (cm->crl == NULL) {
9434- if (wolfSSL_CertManagerEnableCRL(cm, 0) != WOLFSSL_SUCCESS) {
9454+ if (wolfSSL_CertManagerEnableCRL(cm, WOLFSSL_CRL_CHECK)
9455+ != WOLFSSL_SUCCESS) {
94359456 WOLFSSL_MSG("Enable CRL failed");
94369457 return WOLFSSL_FATAL_ERROR;
94379458 }
@@ -9448,7 +9469,8 @@ int wolfSSL_CertManagerLoadCRLFile(WOLFSSL_CERT_MANAGER* cm, const char* file,
94489469 return BAD_FUNC_ARG;
94499470
94509471 if (cm->crl == NULL) {
9451- if (wolfSSL_CertManagerEnableCRL(cm, 0) != WOLFSSL_SUCCESS) {
9472+ if (wolfSSL_CertManagerEnableCRL(cm, WOLFSSL_CRL_CHECK)
9473+ != WOLFSSL_SUCCESS) {
94529474 WOLFSSL_MSG("Enable CRL failed");
94539475 return WOLFSSL_FATAL_ERROR;
94549476 }
@@ -14494,12 +14516,17 @@ void SetupSession(WOLFSSL* ssl)
1449414516
1449514517 WOLFSSL_ENTER("SetupSession");
1449614518
14497- if (!IsAtLeastTLSv1_3(ssl->version) && ssl->arrays != NULL &&
14498- !session->haveAltSessionID) {
14519+ if (!IsAtLeastTLSv1_3(ssl->version) && ssl->arrays != NULL) {
1449914520 /* Make sure the session ID is available when the user calls any
1450014521 * get_session API */
14501- XMEMCPY(session->sessionID, ssl->arrays->sessionID, ID_LEN);
14502- session->sessionIDSz = ssl->arrays->sessionIDSz;
14522+ if (!session->haveAltSessionID) {
14523+ XMEMCPY(session->sessionID, ssl->arrays->sessionID, ID_LEN);
14524+ session->sessionIDSz = ssl->arrays->sessionIDSz;
14525+ }
14526+ else {
14527+ XMEMCPY(session->sessionID, session->altSessionID, ID_LEN);
14528+ session->sessionIDSz = ID_LEN;
14529+ }
1450314530 }
1450414531 session->side = (byte)ssl->options.side;
1450514532 if (!IsAtLeastTLSv1_3(ssl->version) && ssl->arrays != NULL)
@@ -14904,7 +14931,7 @@ int wolfSSL_GetSessionFromCache(WOLFSSL* ssl, WOLFSSL_SESSION* output)
1490414931 if (SslSessionCacheOff(ssl, ssl->session))
1490514932 return WOLFSSL_FAILURE;
1490614933
14907- if (ssl->options.haveSessionId == 0)
14934+ if (ssl->options.haveSessionId == 0 && !ssl->session->haveAltSessionID )
1490814935 return WOLFSSL_FAILURE;
1490914936
1491014937#ifdef HAVE_SESSION_TICKET
@@ -14913,7 +14940,8 @@ int wolfSSL_GetSessionFromCache(WOLFSSL* ssl, WOLFSSL_SESSION* output)
1491314940#endif
1491414941
1491514942 XMEMSET(bogusID, 0, sizeof(bogusID));
14916- if (!IsAtLeastTLSv1_3(ssl->version) && ssl->arrays != NULL)
14943+ if (!IsAtLeastTLSv1_3(ssl->version) && ssl->arrays != NULL
14944+ && !ssl->session->haveAltSessionID)
1491714945 id = ssl->arrays->sessionID;
1491814946 else if (ssl->session->haveAltSessionID) {
1491914947 id = ssl->session->altSessionID;
@@ -23116,8 +23144,9 @@ int wolfSSL_ERR_GET_REASON(unsigned long err)
2311623144#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
2311723145 /* Nginx looks for this error to know to stop parsing certificates.
2311823146 * Same for HAProxy. */
23119- if (err == ((ERR_LIB_PEM << 24) | PEM_R_NO_START_LINE)
23120- || (err & 0xFFFFFFL) == -ASN_NO_PEM_HEADER)
23147+ if (err == ((ERR_LIB_PEM << 24) | PEM_R_NO_START_LINE) ||
23148+ ((err & 0xFFFFFFL) == -ASN_NO_PEM_HEADER) ||
23149+ ((err & 0xFFFL) == PEM_R_NO_START_LINE ))
2312123150 return PEM_R_NO_START_LINE;
2312223151 if (err == ((ERR_LIB_SSL << 24) | -SSL_R_HTTP_REQUEST))
2312323152 return SSL_R_HTTP_REQUEST;
@@ -31248,6 +31277,9 @@ WOLFSSL_CTX* wolfSSL_set_SSL_CTX(WOLFSSL* ssl, WOLFSSL_CTX* ctx)
3124831277#endif
3124931278 if (ssl->ctx) {
3125031279 wolfSSL_CTX_free(ssl->ctx);
31280+ #if defined(WOLFSSL_HAPROXY)
31281+ wolfSSL_CTX_free(ssl->initial_ctx);
31282+ #endif
3125131283 }
3125231284 ssl->ctx = ctx;
3125331285
@@ -31450,6 +31482,12 @@ const byte* wolfSSL_SESSION_get_id(const WOLFSSL_SESSION* sess,
3145031482 WOLFSSL_MSG("Bad func args. Please provide idLen");
3145131483 return NULL;
3145231484 }
31485+ #ifdef HAVE_SESSION_TICKET
31486+ if (sess->haveAltSessionID) {
31487+ *idLen = ID_LEN;
31488+ return sess->altSessionID;
31489+ }
31490+ #endif
3145331491 *idLen = sess->sessionIDSz;
3145431492 return sess->sessionID;
3145531493}
0 commit comments