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.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c
index 102ad66bbb..b5db579489 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.100 2022/06/29 21:17:22 tb Exp $ */ 1/* $OpenBSD: ssl_cert.c,v 1.101 2022/06/29 21:18:04 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 *
@@ -358,25 +358,37 @@ ssl_cert_set1_chain(SSL_CTX *ctx, SSL *ssl, STACK_OF(X509) *chain)
358} 358}
359 359
360int 360int
361ssl_cert_add0_chain_cert(SSL_CERT *c, X509 *cert) 361ssl_cert_add0_chain_cert(SSL_CTX *ctx, SSL *ssl, X509 *cert)
362{ 362{
363 if (c->key == NULL) 363 SSL_CERT *ssl_cert;
364 SSL_CERT_PKEY *cpk;
365 int ssl_err;
366
367 if ((ssl_cert = ssl_get0_cert(ctx, ssl)) == NULL)
364 return 0; 368 return 0;
365 369
366 if (c->key->chain == NULL) { 370 if ((cpk = ssl_cert->key) == NULL)
367 if ((c->key->chain = sk_X509_new_null()) == NULL) 371 return 0;
372
373 if (!ssl_security_cert(ctx, ssl, cert, 0, &ssl_err)) {
374 SSLerrorx(ssl_err);
375 return 0;
376 }
377
378 if (cpk->chain == NULL) {
379 if ((cpk->chain = sk_X509_new_null()) == NULL)
368 return 0; 380 return 0;
369 } 381 }
370 if (!sk_X509_push(c->key->chain, cert)) 382 if (!sk_X509_push(cpk->chain, cert))
371 return 0; 383 return 0;
372 384
373 return 1; 385 return 1;
374} 386}
375 387
376int 388int
377ssl_cert_add1_chain_cert(SSL_CERT *c, X509 *cert) 389ssl_cert_add1_chain_cert(SSL_CTX *ctx, SSL *ssl, X509 *cert)
378{ 390{
379 if (!ssl_cert_add0_chain_cert(c, cert)) 391 if (!ssl_cert_add0_chain_cert(ctx, ssl, cert))
380 return 0; 392 return 0;
381 393
382 X509_up_ref(cert); 394 X509_up_ref(cert);