diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib/libssl/ssl_cert.c | 31 |
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 | ||
314 | int | 314 | int |
315 | ssl_cert_set0_chain(SSL_CERT *c, STACK_OF(X509) *chain) | 315 | ssl_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 | ||
326 | int | 343 | int |
327 | ssl_cert_set1_chain(SSL_CERT *c, STACK_OF(X509) *chain) | 344 | ssl_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 | } |