diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libtls/tls_ocsp.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/src/lib/libtls/tls_ocsp.c b/src/lib/libtls/tls_ocsp.c index f00e6bc84b..3b06f01eba 100644 --- a/src/lib/libtls/tls_ocsp.c +++ b/src/lib/libtls/tls_ocsp.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls_ocsp.c,v 1.20 2021/03/23 20:04:29 tb Exp $ */ | 1 | /* $OpenBSD: tls_ocsp.c,v 1.21 2021/10/21 14:57:55 tb Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2015 Marko Kreen <markokr@gmail.com> | 3 | * Copyright (c) 2015 Marko Kreen <markokr@gmail.com> |
| 4 | * Copyright (c) 2016 Bob Beck <beck@openbsd.org> | 4 | * Copyright (c) 2016 Bob Beck <beck@openbsd.org> |
| @@ -128,30 +128,38 @@ tls_ocsp_get_certid(X509 *main_cert, STACK_OF(X509) *extra_certs, | |||
| 128 | { | 128 | { |
| 129 | X509_NAME *issuer_name; | 129 | X509_NAME *issuer_name; |
| 130 | X509 *issuer; | 130 | X509 *issuer; |
| 131 | X509_STORE_CTX storectx; | 131 | X509_STORE_CTX *storectx = NULL; |
| 132 | X509_OBJECT tmpobj; | 132 | X509_OBJECT tmpobj; |
| 133 | OCSP_CERTID *cid = NULL; | 133 | OCSP_CERTID *cid = NULL; |
| 134 | X509_STORE *store; | 134 | X509_STORE *store; |
| 135 | 135 | ||
| 136 | if ((issuer_name = X509_get_issuer_name(main_cert)) == NULL) | 136 | if ((issuer_name = X509_get_issuer_name(main_cert)) == NULL) |
| 137 | return NULL; | 137 | goto out; |
| 138 | 138 | ||
| 139 | if (extra_certs != NULL) { | 139 | if (extra_certs != NULL) { |
| 140 | issuer = X509_find_by_subject(extra_certs, issuer_name); | 140 | issuer = X509_find_by_subject(extra_certs, issuer_name); |
| 141 | if (issuer != NULL) | 141 | if (issuer != NULL) { |
| 142 | return OCSP_cert_to_id(NULL, main_cert, issuer); | 142 | cid = OCSP_cert_to_id(NULL, main_cert, issuer); |
| 143 | goto out; | ||
| 144 | } | ||
| 143 | } | 145 | } |
| 144 | 146 | ||
| 145 | if ((store = SSL_CTX_get_cert_store(ssl_ctx)) == NULL) | 147 | if ((store = SSL_CTX_get_cert_store(ssl_ctx)) == NULL) |
| 146 | return NULL; | 148 | goto out; |
| 147 | if (X509_STORE_CTX_init(&storectx, store, main_cert, extra_certs) != 1) | 149 | if ((storectx = X509_STORE_CTX_new()) == NULL) |
| 148 | return NULL; | 150 | goto out; |
| 149 | if (X509_STORE_get_by_subject(&storectx, X509_LU_X509, issuer_name, | 151 | if (X509_STORE_CTX_init(storectx, store, main_cert, extra_certs) != 1) |
| 150 | &tmpobj) == 1) { | 152 | goto out; |
| 151 | cid = OCSP_cert_to_id(NULL, main_cert, tmpobj.data.x509); | 153 | if (X509_STORE_get_by_subject(storectx, X509_LU_X509, issuer_name, |
| 154 | &tmpobj) == 1) { | ||
| 155 | cid = OCSP_cert_to_id(NULL, main_cert, | ||
| 156 | X509_OBJECT_get0_X509(&tmpobj)); | ||
| 152 | X509_OBJECT_free_contents(&tmpobj); | 157 | X509_OBJECT_free_contents(&tmpobj); |
| 153 | } | 158 | } |
| 154 | X509_STORE_CTX_cleanup(&storectx); | 159 | |
| 160 | out: | ||
| 161 | X509_STORE_CTX_free(storectx); | ||
| 162 | |||
| 155 | return cid; | 163 | return cid; |
| 156 | } | 164 | } |
| 157 | 165 | ||
