summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libtls/tls_ocsp.c32
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