diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libssl/s3_lib.c | 14 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_cert.c | 31 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_locl.h | 6 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_rsa.c | 4 |
4 files changed, 36 insertions, 19 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index 12eb9f4af4..abc72565fa 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: s3_lib.c,v 1.231 2022/06/29 17:39:20 beck Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.232 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 | * |
| @@ -1867,13 +1867,13 @@ _SSL_set_tlsext_status_ocsp_resp(SSL *s, unsigned char *resp, int resp_len) | |||
| 1867 | int | 1867 | int |
| 1868 | SSL_set0_chain(SSL *ssl, STACK_OF(X509) *chain) | 1868 | SSL_set0_chain(SSL *ssl, STACK_OF(X509) *chain) |
| 1869 | { | 1869 | { |
| 1870 | return ssl_cert_set0_chain(ssl->cert, chain); | 1870 | return ssl_cert_set0_chain(NULL, ssl, chain); |
| 1871 | } | 1871 | } |
| 1872 | 1872 | ||
| 1873 | int | 1873 | int |
| 1874 | SSL_set1_chain(SSL *ssl, STACK_OF(X509) *chain) | 1874 | SSL_set1_chain(SSL *ssl, STACK_OF(X509) *chain) |
| 1875 | { | 1875 | { |
| 1876 | return ssl_cert_set1_chain(ssl->cert, chain); | 1876 | return ssl_cert_set1_chain(NULL, ssl, chain); |
| 1877 | } | 1877 | } |
| 1878 | 1878 | ||
| 1879 | int | 1879 | int |
| @@ -1902,7 +1902,7 @@ SSL_get0_chain_certs(const SSL *ssl, STACK_OF(X509) **out_chain) | |||
| 1902 | int | 1902 | int |
| 1903 | SSL_clear_chain_certs(SSL *ssl) | 1903 | SSL_clear_chain_certs(SSL *ssl) |
| 1904 | { | 1904 | { |
| 1905 | return ssl_cert_set0_chain(ssl->cert, NULL); | 1905 | return ssl_cert_set0_chain(NULL, ssl, NULL); |
| 1906 | } | 1906 | } |
| 1907 | 1907 | ||
| 1908 | int | 1908 | int |
| @@ -2255,13 +2255,13 @@ _SSL_CTX_set_tlsext_status_arg(SSL_CTX *ctx, void *arg) | |||
| 2255 | int | 2255 | int |
| 2256 | SSL_CTX_set0_chain(SSL_CTX *ctx, STACK_OF(X509) *chain) | 2256 | SSL_CTX_set0_chain(SSL_CTX *ctx, STACK_OF(X509) *chain) |
| 2257 | { | 2257 | { |
| 2258 | return ssl_cert_set0_chain(ctx->internal->cert, chain); | 2258 | return ssl_cert_set0_chain(ctx, NULL, chain); |
| 2259 | } | 2259 | } |
| 2260 | 2260 | ||
| 2261 | int | 2261 | int |
| 2262 | SSL_CTX_set1_chain(SSL_CTX *ctx, STACK_OF(X509) *chain) | 2262 | SSL_CTX_set1_chain(SSL_CTX *ctx, STACK_OF(X509) *chain) |
| 2263 | { | 2263 | { |
| 2264 | return ssl_cert_set1_chain(ctx->internal->cert, chain); | 2264 | return ssl_cert_set1_chain(ctx, NULL, chain); |
| 2265 | } | 2265 | } |
| 2266 | 2266 | ||
| 2267 | int | 2267 | int |
| @@ -2290,7 +2290,7 @@ SSL_CTX_get0_chain_certs(const SSL_CTX *ctx, STACK_OF(X509) **out_chain) | |||
| 2290 | int | 2290 | int |
| 2291 | SSL_CTX_clear_chain_certs(SSL_CTX *ctx) | 2291 | SSL_CTX_clear_chain_certs(SSL_CTX *ctx) |
| 2292 | { | 2292 | { |
| 2293 | return ssl_cert_set0_chain(ctx->internal->cert, NULL); | 2293 | return ssl_cert_set0_chain(ctx, NULL, NULL); |
| 2294 | } | 2294 | } |
| 2295 | 2295 | ||
| 2296 | static int | 2296 | static int |
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 | } |
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index 83374fa69f..fd644e5b37 100644 --- a/src/lib/libssl/ssl_locl.h +++ b/src/lib/libssl/ssl_locl.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_locl.h,v 1.405 2022/06/29 21:12:19 tb Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.406 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 | * |
| @@ -1286,8 +1286,8 @@ SSL_CERT *ssl_cert_new(void); | |||
| 1286 | SSL_CERT *ssl_cert_dup(SSL_CERT *cert); | 1286 | SSL_CERT *ssl_cert_dup(SSL_CERT *cert); |
| 1287 | void ssl_cert_free(SSL_CERT *c); | 1287 | void ssl_cert_free(SSL_CERT *c); |
| 1288 | SSL_CERT *ssl_get0_cert(SSL_CTX *ctx, SSL *ssl); | 1288 | SSL_CERT *ssl_get0_cert(SSL_CTX *ctx, SSL *ssl); |
| 1289 | int ssl_cert_set0_chain(SSL_CERT *c, STACK_OF(X509) *chain); | 1289 | int ssl_cert_set0_chain(SSL_CTX *ctx, SSL *ssl, STACK_OF(X509) *chain); |
| 1290 | int ssl_cert_set1_chain(SSL_CERT *c, STACK_OF(X509) *chain); | 1290 | int ssl_cert_set1_chain(SSL_CTX *ctx, SSL *ssl, STACK_OF(X509) *chain); |
| 1291 | int ssl_cert_add0_chain_cert(SSL_CERT *c, X509 *cert); | 1291 | int ssl_cert_add0_chain_cert(SSL_CERT *c, X509 *cert); |
| 1292 | int ssl_cert_add1_chain_cert(SSL_CERT *c, X509 *cert); | 1292 | int ssl_cert_add1_chain_cert(SSL_CERT *c, X509 *cert); |
| 1293 | 1293 | ||
diff --git a/src/lib/libssl/ssl_rsa.c b/src/lib/libssl/ssl_rsa.c index 11296d3baa..32634a7f0d 100644 --- a/src/lib/libssl/ssl_rsa.c +++ b/src/lib/libssl/ssl_rsa.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_rsa.c,v 1.42 2022/06/29 21:16:30 tb Exp $ */ | 1 | /* $OpenBSD: ssl_rsa.c,v 1.43 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 | * |
| @@ -661,7 +661,7 @@ use_certificate_chain_bio(SSL_CTX *ctx, SSL *ssl, BIO *in) | |||
| 661 | if (!ssl_set_cert(ctx, ssl, x)) | 661 | if (!ssl_set_cert(ctx, ssl, x)) |
| 662 | goto err; | 662 | goto err; |
| 663 | 663 | ||
| 664 | if (!ssl_cert_set0_chain(cert, NULL)) | 664 | if (!ssl_cert_set0_chain(ctx, ssl, NULL)) |
| 665 | goto err; | 665 | goto err; |
| 666 | 666 | ||
| 667 | /* Process any additional CA certificates. */ | 667 | /* Process any additional CA certificates. */ |
