Update chain building function.
Don't clear verification errors from the error queue unless
SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR is set.
If errors occur during verification and SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR
is set return 2 so applications can issue warnings.
(cherry picked from commit 2dd6976f6d02f98b30c376951ac38f780a86b3b5)
diff --git a/ssl/ssl_cert.c b/ssl/ssl_cert.c
index 09ea611..3ad0f8b 100644
--- a/ssl/ssl_cert.c
+++ b/ssl/ssl_cert.c
@@ -1247,8 +1247,10 @@
i = X509_verify_cert(&xs_ctx);
if (i <= 0 && flags & SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR)
{
- ERR_clear_error();
+ if (flags & SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR)
+ ERR_clear_error();
i = 1;
+ rv = 2;
}
if (i > 0)
chain = X509_STORE_CTX_get1_chain(&xs_ctx);
@@ -1283,7 +1285,8 @@
}
}
cpk->chain = chain;
- rv = 1;
+ if (rv == 0)
+ rv = 1;
err:
if (flags & SSL_BUILD_CHAIN_FLAG_CHECK)
X509_STORE_free(chain_store);