diff options
author | jkim <jkim@FreeBSD.org> | 2015-06-11 19:00:55 +0000 |
---|---|---|
committer | jkim <jkim@FreeBSD.org> | 2015-06-11 19:00:55 +0000 |
commit | d675e841ef78a78bab5972d63fa3d8d15ecdbb19 (patch) | |
tree | af421c8f5f156e1b4b26149d5c4964d037dd0454 /crypto/openssl/crypto/ocsp/ocsp_vfy.c | |
parent | aec7d82113b7de83f7ac3f9470fde49813358dec (diff) | |
download | FreeBSD-src-d675e841ef78a78bab5972d63fa3d8d15ecdbb19.zip FreeBSD-src-d675e841ef78a78bab5972d63fa3d8d15ecdbb19.tar.gz |
Merge OpenSSL 1.0.1n.
Diffstat (limited to 'crypto/openssl/crypto/ocsp/ocsp_vfy.c')
-rw-r--r-- | crypto/openssl/crypto/ocsp/ocsp_vfy.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/crypto/openssl/crypto/ocsp/ocsp_vfy.c b/crypto/openssl/crypto/ocsp/ocsp_vfy.c index 6c0ccb5..d4a257c 100644 --- a/crypto/openssl/crypto/ocsp/ocsp_vfy.c +++ b/crypto/openssl/crypto/ocsp/ocsp_vfy.c @@ -83,6 +83,7 @@ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, { X509 *signer, *x; STACK_OF(X509) *chain = NULL; + STACK_OF(X509) *untrusted = NULL; X509_STORE_CTX ctx; int i, ret = 0; ret = ocsp_find_signer(&signer, bs, certs, st, flags); @@ -107,10 +108,20 @@ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, } if (!(flags & OCSP_NOVERIFY)) { int init_res; - if (flags & OCSP_NOCHAIN) - init_res = X509_STORE_CTX_init(&ctx, st, signer, NULL); - else - init_res = X509_STORE_CTX_init(&ctx, st, signer, bs->certs); + if (flags & OCSP_NOCHAIN) { + untrusted = NULL; + } else if (bs->certs && certs) { + untrusted = sk_X509_dup(bs->certs); + for (i = 0; i < sk_X509_num(certs); i++) { + if (!sk_X509_push(untrusted, sk_X509_value(certs, i))) { + OCSPerr(OCSP_F_OCSP_BASIC_VERIFY, ERR_R_MALLOC_FAILURE); + goto end; + } + } + } else { + untrusted = bs->certs; + } + init_res = X509_STORE_CTX_init(&ctx, st, signer, untrusted); if (!init_res) { ret = -1; OCSPerr(OCSP_F_OCSP_BASIC_VERIFY, ERR_R_X509_LIB); @@ -161,6 +172,8 @@ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, end: if (chain) sk_X509_pop_free(chain, X509_free); + if (bs->certs && certs) + sk_X509_free(untrusted); return ret; } |