diff options
author | tb <> | 2022-06-29 21:18:04 +0000 |
---|---|---|
committer | tb <> | 2022-06-29 21:18:04 +0000 |
commit | 831bfdd11f50ae38c3e5fe343d11393a2e503f51 (patch) | |
tree | 473d8a8c4710121d3c89d14c161565036d7a3301 | |
parent | 4f5e300043721913395d3fbf45b68d4cc92ea802 (diff) | |
download | openbsd-831bfdd11f50ae38c3e5fe343d11393a2e503f51.tar.gz openbsd-831bfdd11f50ae38c3e5fe343d11393a2e503f51.tar.bz2 openbsd-831bfdd11f50ae38c3e5fe343d11393a2e503f51.zip |
Make ssl_cert_add{0,1}_chain_cert() take ssl/ctx
ok beck jsing
-rw-r--r-- | src/lib/libssl/s3_lib.c | 10 | ||||
-rw-r--r-- | src/lib/libssl/ssl_cert.c | 28 | ||||
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 6 | ||||
-rw-r--r-- | src/lib/libssl/ssl_rsa.c | 8 |
4 files changed, 30 insertions, 22 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index abc72565fa..4575a141cf 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.232 2022/06/29 21:17:22 tb Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.233 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 | * |
@@ -1879,13 +1879,13 @@ SSL_set1_chain(SSL *ssl, STACK_OF(X509) *chain) | |||
1879 | int | 1879 | int |
1880 | SSL_add0_chain_cert(SSL *ssl, X509 *x509) | 1880 | SSL_add0_chain_cert(SSL *ssl, X509 *x509) |
1881 | { | 1881 | { |
1882 | return ssl_cert_add0_chain_cert(ssl->cert, x509); | 1882 | return ssl_cert_add0_chain_cert(NULL, ssl, x509); |
1883 | } | 1883 | } |
1884 | 1884 | ||
1885 | int | 1885 | int |
1886 | SSL_add1_chain_cert(SSL *ssl, X509 *x509) | 1886 | SSL_add1_chain_cert(SSL *ssl, X509 *x509) |
1887 | { | 1887 | { |
1888 | return ssl_cert_add1_chain_cert(ssl->cert, x509); | 1888 | return ssl_cert_add1_chain_cert(NULL, ssl, x509); |
1889 | } | 1889 | } |
1890 | 1890 | ||
1891 | int | 1891 | int |
@@ -2267,13 +2267,13 @@ SSL_CTX_set1_chain(SSL_CTX *ctx, STACK_OF(X509) *chain) | |||
2267 | int | 2267 | int |
2268 | SSL_CTX_add0_chain_cert(SSL_CTX *ctx, X509 *x509) | 2268 | SSL_CTX_add0_chain_cert(SSL_CTX *ctx, X509 *x509) |
2269 | { | 2269 | { |
2270 | return ssl_cert_add0_chain_cert(ctx->internal->cert, x509); | 2270 | return ssl_cert_add0_chain_cert(ctx, NULL, x509); |
2271 | } | 2271 | } |
2272 | 2272 | ||
2273 | int | 2273 | int |
2274 | SSL_CTX_add1_chain_cert(SSL_CTX *ctx, X509 *x509) | 2274 | SSL_CTX_add1_chain_cert(SSL_CTX *ctx, X509 *x509) |
2275 | { | 2275 | { |
2276 | return ssl_cert_add1_chain_cert(ctx->internal->cert, x509); | 2276 | return ssl_cert_add1_chain_cert(ctx, NULL, x509); |
2277 | } | 2277 | } |
2278 | 2278 | ||
2279 | int | 2279 | int |
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); |
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index fd644e5b37..b46e37f5eb 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.406 2022/06/29 21:17:22 tb Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.407 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 | * |
@@ -1288,8 +1288,8 @@ 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_CTX *ctx, SSL *ssl, 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_CTX *ctx, SSL *ssl, 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_CTX *ctx, SSL *ssl, X509 *cert); |
1292 | int ssl_cert_add1_chain_cert(SSL_CERT *c, X509 *cert); | 1292 | int ssl_cert_add1_chain_cert(SSL_CTX *ctx, SSL *ssl, X509 *cert); |
1293 | 1293 | ||
1294 | int ssl_security_default_cb(const SSL *ssl, const SSL_CTX *ctx, int op, | 1294 | int ssl_security_default_cb(const SSL *ssl, const SSL_CTX *ctx, int op, |
1295 | int bits, int nid, void *other, void *ex_data); | 1295 | int bits, int nid, void *other, void *ex_data); |
diff --git a/src/lib/libssl/ssl_rsa.c b/src/lib/libssl/ssl_rsa.c index 32634a7f0d..9a1f916e57 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.43 2022/06/29 21:17:22 tb Exp $ */ | 1 | /* $OpenBSD: ssl_rsa.c,v 1.44 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 | * |
@@ -641,7 +641,6 @@ use_certificate_chain_bio(SSL_CTX *ctx, SSL *ssl, BIO *in) | |||
641 | { | 641 | { |
642 | pem_password_cb *passwd_cb; | 642 | pem_password_cb *passwd_cb; |
643 | void *passwd_arg; | 643 | void *passwd_arg; |
644 | SSL_CERT *cert; | ||
645 | X509 *ca, *x = NULL; | 644 | X509 *ca, *x = NULL; |
646 | unsigned long err; | 645 | unsigned long err; |
647 | int ret = 0; | 646 | int ret = 0; |
@@ -655,9 +654,6 @@ use_certificate_chain_bio(SSL_CTX *ctx, SSL *ssl, BIO *in) | |||
655 | goto err; | 654 | goto err; |
656 | } | 655 | } |
657 | 656 | ||
658 | if ((cert = ssl_get0_cert(ctx, ssl)) == NULL) | ||
659 | goto err; | ||
660 | |||
661 | if (!ssl_set_cert(ctx, ssl, x)) | 657 | if (!ssl_set_cert(ctx, ssl, x)) |
662 | goto err; | 658 | goto err; |
663 | 659 | ||
@@ -667,7 +663,7 @@ use_certificate_chain_bio(SSL_CTX *ctx, SSL *ssl, BIO *in) | |||
667 | /* Process any additional CA certificates. */ | 663 | /* Process any additional CA certificates. */ |
668 | while ((ca = PEM_read_bio_X509(in, NULL, passwd_cb, passwd_arg)) != | 664 | while ((ca = PEM_read_bio_X509(in, NULL, passwd_cb, passwd_arg)) != |
669 | NULL) { | 665 | NULL) { |
670 | if (!ssl_cert_add0_chain_cert(cert, ca)) { | 666 | if (!ssl_cert_add0_chain_cert(ctx, ssl, ca)) { |
671 | X509_free(ca); | 667 | X509_free(ca); |
672 | goto err; | 668 | goto err; |
673 | } | 669 | } |