summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_cert.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib/libssl/ssl_cert.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c
index 21937f8513..102ad66bbb 100644
--- a/src/lib/libssl/ssl_cert.c
+++ b/src/lib/libssl/ssl_cert.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_cert.c,v 1.99 2022/06/29 21:12:19 tb Exp $ */ 1/* $OpenBSD: ssl_cert.c,v 1.100 2022/06/29 21:17:22 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -312,19 +312,36 @@ ssl_get0_cert(SSL_CTX *ctx, SSL *ssl)
312} 312}
313 313
314int 314int
315ssl_cert_set0_chain(SSL_CERT *c, STACK_OF(X509) *chain) 315ssl_cert_set0_chain(SSL_CTX *ctx, SSL *ssl, STACK_OF(X509) *chain)
316{ 316{
317 if (c->key == NULL) 317 SSL_CERT *ssl_cert;
318 SSL_CERT_PKEY *cpk;
319 X509 *x509;
320 int ssl_err;
321 int i;
322
323 if ((ssl_cert = ssl_get0_cert(ctx, ssl)) == NULL)
324 return 0;
325
326 if ((cpk = ssl_cert->key) == NULL)
318 return 0; 327 return 0;
319 328
320 sk_X509_pop_free(c->key->chain, X509_free); 329 for (i = 0; i < sk_X509_num(chain); i++) {
321 c->key->chain = chain; 330 x509 = sk_X509_value(chain, i);
331 if (!ssl_security_cert(ctx, ssl, x509, 0, &ssl_err)) {
332 SSLerrorx(ssl_err);
333 return 0;
334 }
335 }
336
337 sk_X509_pop_free(cpk->chain, X509_free);
338 cpk->chain = chain;
322 339
323 return 1; 340 return 1;
324} 341}
325 342
326int 343int
327ssl_cert_set1_chain(SSL_CERT *c, STACK_OF(X509) *chain) 344ssl_cert_set1_chain(SSL_CTX *ctx, SSL *ssl, STACK_OF(X509) *chain)
328{ 345{
329 STACK_OF(X509) *new_chain = NULL; 346 STACK_OF(X509) *new_chain = NULL;
330 347
@@ -332,7 +349,7 @@ ssl_cert_set1_chain(SSL_CERT *c, STACK_OF(X509) *chain)
332 if ((new_chain = X509_chain_up_ref(chain)) == NULL) 349 if ((new_chain = X509_chain_up_ref(chain)) == NULL)
333 return 0; 350 return 0;
334 } 351 }
335 if (!ssl_cert_set0_chain(c, new_chain)) { 352 if (!ssl_cert_set0_chain(ctx, ssl, new_chain)) {
336 sk_X509_pop_free(new_chain, X509_free); 353 sk_X509_pop_free(new_chain, X509_free);
337 return 0; 354 return 0;
338 } 355 }