diff options
Diffstat (limited to 'src/lib/libssl/ssl_cert.c')
| -rw-r--r-- | src/lib/libssl/ssl_cert.c | 28 |
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 | ||
| 360 | int | 360 | int |
| 361 | ssl_cert_add0_chain_cert(SSL_CERT *c, X509 *cert) | 361 | ssl_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 | ||
| 376 | int | 388 | int |
| 377 | ssl_cert_add1_chain_cert(SSL_CERT *c, X509 *cert) | 389 | ssl_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); |
