summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/x509/x509_vfy.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/x509/x509_vfy.c')
-rw-r--r--src/lib/libcrypto/x509/x509_vfy.c38
1 files changed, 4 insertions, 34 deletions
diff --git a/src/lib/libcrypto/x509/x509_vfy.c b/src/lib/libcrypto/x509/x509_vfy.c
index 8bba796198..8fd193699e 100644
--- a/src/lib/libcrypto/x509/x509_vfy.c
+++ b/src/lib/libcrypto/x509/x509_vfy.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509_vfy.c,v 1.111 2023/02/16 08:38:17 tb Exp $ */ 1/* $OpenBSD: x509_vfy.c,v 1.112 2023/04/16 08:06:42 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 *
@@ -732,7 +732,6 @@ x509_vfy_check_chain_extensions(X509_STORE_CTX *ctx)
732 int (*cb)(int xok, X509_STORE_CTX *xctx); 732 int (*cb)(int xok, X509_STORE_CTX *xctx);
733 int proxy_path_length = 0; 733 int proxy_path_length = 0;
734 int purpose; 734 int purpose;
735 int allow_proxy_certs;
736 735
737 cb = ctx->verify_cb; 736 cb = ctx->verify_cb;
738 737
@@ -747,14 +746,10 @@ x509_vfy_check_chain_extensions(X509_STORE_CTX *ctx)
747 must_be_ca = -1; 746 must_be_ca = -1;
748 747
749 /* CRL path validation */ 748 /* CRL path validation */
750 if (ctx->parent) { 749 if (ctx->parent)
751 allow_proxy_certs = 0;
752 purpose = X509_PURPOSE_CRL_SIGN; 750 purpose = X509_PURPOSE_CRL_SIGN;
753 } else { 751 else
754 allow_proxy_certs =
755 !!(ctx->param->flags & X509_V_FLAG_ALLOW_PROXY_CERTS);
756 purpose = ctx->param->purpose; 752 purpose = ctx->param->purpose;
757 }
758 753
759 /* Check all untrusted certificates */ 754 /* Check all untrusted certificates */
760 for (i = 0; i < ctx->num_untrusted; i++) { 755 for (i = 0; i < ctx->num_untrusted; i++) {
@@ -769,14 +764,6 @@ x509_vfy_check_chain_extensions(X509_STORE_CTX *ctx)
769 if (!ok) 764 if (!ok)
770 goto end; 765 goto end;
771 } 766 }
772 if (!allow_proxy_certs && (x->ex_flags & EXFLAG_PROXY)) {
773 ctx->error = X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED;
774 ctx->error_depth = i;
775 ctx->current_cert = x;
776 ok = cb(0, ctx);
777 if (!ok)
778 goto end;
779 }
780 ret = X509_check_ca(x); 767 ret = X509_check_ca(x);
781 switch (must_be_ca) { 768 switch (must_be_ca) {
782 case -1: 769 case -1:
@@ -838,24 +825,7 @@ x509_vfy_check_chain_extensions(X509_STORE_CTX *ctx)
838 /* Increment path length if not self issued */ 825 /* Increment path length if not self issued */
839 if (!(x->ex_flags & EXFLAG_SI)) 826 if (!(x->ex_flags & EXFLAG_SI))
840 plen++; 827 plen++;
841 /* If this certificate is a proxy certificate, the next 828 must_be_ca = 1;
842 certificate must be another proxy certificate or a EE
843 certificate. If not, the next certificate must be a
844 CA certificate. */
845 if (x->ex_flags & EXFLAG_PROXY) {
846 if (x->ex_pcpathlen != -1 && i > x->ex_pcpathlen) {
847 ctx->error =
848 X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED;
849 ctx->error_depth = i;
850 ctx->current_cert = x;
851 ok = cb(0, ctx);
852 if (!ok)
853 goto end;
854 }
855 proxy_path_length++;
856 must_be_ca = 0;
857 } else
858 must_be_ca = 1;
859 } 829 }
860 ok = 1; 830 ok = 1;
861 831