summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2022-06-29 21:17:22 +0000
committertb <>2022-06-29 21:17:22 +0000
commit4f5e300043721913395d3fbf45b68d4cc92ea802 (patch)
tree714bc05e273fcf4d1fec0ddfff0bd9cf80adb8b4
parent8b16ea4ecb70d4182a4bcde733e1d64267f9c488 (diff)
downloadopenbsd-4f5e300043721913395d3fbf45b68d4cc92ea802.tar.gz
openbsd-4f5e300043721913395d3fbf45b68d4cc92ea802.tar.bz2
openbsd-4f5e300043721913395d3fbf45b68d4cc92ea802.zip
ssl_cert_set{0,1}_chain() take ssl/ctx
ok beck jsing
-rw-r--r--src/lib/libssl/s3_lib.c14
-rw-r--r--src/lib/libssl/ssl_cert.c31
-rw-r--r--src/lib/libssl/ssl_locl.h6
-rw-r--r--src/lib/libssl/ssl_rsa.c4
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)
1867int 1867int
1868SSL_set0_chain(SSL *ssl, STACK_OF(X509) *chain) 1868SSL_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
1873int 1873int
1874SSL_set1_chain(SSL *ssl, STACK_OF(X509) *chain) 1874SSL_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
1879int 1879int
@@ -1902,7 +1902,7 @@ SSL_get0_chain_certs(const SSL *ssl, STACK_OF(X509) **out_chain)
1902int 1902int
1903SSL_clear_chain_certs(SSL *ssl) 1903SSL_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
1908int 1908int
@@ -2255,13 +2255,13 @@ _SSL_CTX_set_tlsext_status_arg(SSL_CTX *ctx, void *arg)
2255int 2255int
2256SSL_CTX_set0_chain(SSL_CTX *ctx, STACK_OF(X509) *chain) 2256SSL_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
2261int 2261int
2262SSL_CTX_set1_chain(SSL_CTX *ctx, STACK_OF(X509) *chain) 2262SSL_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
2267int 2267int
@@ -2290,7 +2290,7 @@ SSL_CTX_get0_chain_certs(const SSL_CTX *ctx, STACK_OF(X509) **out_chain)
2290int 2290int
2291SSL_CTX_clear_chain_certs(SSL_CTX *ctx) 2291SSL_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
2296static int 2296static 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
314int 314int
315ssl_cert_set0_chain(SSL_CERT *c, STACK_OF(X509) *chain) 315ssl_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
326int 343int
327ssl_cert_set1_chain(SSL_CERT *c, STACK_OF(X509) *chain) 344ssl_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);
1286SSL_CERT *ssl_cert_dup(SSL_CERT *cert); 1286SSL_CERT *ssl_cert_dup(SSL_CERT *cert);
1287void ssl_cert_free(SSL_CERT *c); 1287void ssl_cert_free(SSL_CERT *c);
1288SSL_CERT *ssl_get0_cert(SSL_CTX *ctx, SSL *ssl); 1288SSL_CERT *ssl_get0_cert(SSL_CTX *ctx, SSL *ssl);
1289int ssl_cert_set0_chain(SSL_CERT *c, STACK_OF(X509) *chain); 1289int ssl_cert_set0_chain(SSL_CTX *ctx, SSL *ssl, STACK_OF(X509) *chain);
1290int ssl_cert_set1_chain(SSL_CERT *c, STACK_OF(X509) *chain); 1290int ssl_cert_set1_chain(SSL_CTX *ctx, SSL *ssl, STACK_OF(X509) *chain);
1291int ssl_cert_add0_chain_cert(SSL_CERT *c, X509 *cert); 1291int ssl_cert_add0_chain_cert(SSL_CERT *c, X509 *cert);
1292int ssl_cert_add1_chain_cert(SSL_CERT *c, X509 *cert); 1292int 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. */