mirror of https://github.com/openssl/openssl.git
Inherit hostflags verify params even without hosts
X509_VERIFY_PARAM_inherit() now copies hostflags independently of hosts. Previously hostflags were only copied when at least one host was set. Typically applications don't configure hosts on SSL_CTX. The change enables applications to configure hostflags on SSL_CTX and have OpenSSL copy the flags from SSL_CTX to SSL. Fixes: https://github.com/openssl/openssl/issues/14579 Signed-off-by: Christian Heimes <christian@python.org> Reviewed-by: Paul Dale <pauli@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/14856)
This commit is contained in:
parent
7e12c2b3d9
commit
fdb4cbd20f
|
|
@ -199,7 +199,8 @@ int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *dest,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy the host flags if and only if we're copying the host list */
|
x509_verify_param_copy(hostflags, 0);
|
||||||
|
|
||||||
if (test_x509_verify_param_copy(hosts, NULL)) {
|
if (test_x509_verify_param_copy(hosts, NULL)) {
|
||||||
sk_OPENSSL_STRING_pop_free(dest->hosts, str_free);
|
sk_OPENSSL_STRING_pop_free(dest->hosts, str_free);
|
||||||
dest->hosts = NULL;
|
dest->hosts = NULL;
|
||||||
|
|
@ -208,7 +209,6 @@ int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *dest,
|
||||||
sk_OPENSSL_STRING_deep_copy(src->hosts, str_copy, str_free);
|
sk_OPENSSL_STRING_deep_copy(src->hosts, str_copy, str_free);
|
||||||
if (dest->hosts == NULL)
|
if (dest->hosts == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
dest->hostflags = src->hostflags;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
#include <openssl/srp.h>
|
#include <openssl/srp.h>
|
||||||
#include <openssl/txt_db.h>
|
#include <openssl/txt_db.h>
|
||||||
#include <openssl/aes.h>
|
#include <openssl/aes.h>
|
||||||
|
#include <openssl/x509v3.h>
|
||||||
|
|
||||||
#include "ssltestlib.h"
|
#include "ssltestlib.h"
|
||||||
#include "testutil.h"
|
#include "testutil.h"
|
||||||
|
|
@ -6787,6 +6788,47 @@ end:
|
||||||
return testresult;
|
return testresult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int test_inherit_verify_param(void)
|
||||||
|
{
|
||||||
|
int testresult = 0;
|
||||||
|
|
||||||
|
SSL_CTX *ctx = NULL;
|
||||||
|
X509_VERIFY_PARAM *cp = NULL;
|
||||||
|
SSL *ssl = NULL;
|
||||||
|
X509_VERIFY_PARAM *sp = NULL;
|
||||||
|
int hostflags = X509_CHECK_FLAG_NEVER_CHECK_SUBJECT;
|
||||||
|
|
||||||
|
ctx = SSL_CTX_new(TLS_server_method());
|
||||||
|
if (!TEST_ptr(ctx))
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
cp = SSL_CTX_get0_param(ctx);
|
||||||
|
if (!TEST_ptr(cp))
|
||||||
|
goto end;
|
||||||
|
if (!TEST_int_eq(X509_VERIFY_PARAM_get_hostflags(cp), 0))
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_set_hostflags(cp, hostflags);
|
||||||
|
|
||||||
|
ssl = SSL_new(ctx);
|
||||||
|
if (!TEST_ptr(ssl))
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
sp = SSL_get0_param(ssl);
|
||||||
|
if (!TEST_ptr(sp))
|
||||||
|
goto end;
|
||||||
|
if (!TEST_int_eq(X509_VERIFY_PARAM_get_hostflags(sp), hostflags))
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
testresult = 1;
|
||||||
|
|
||||||
|
end:
|
||||||
|
SSL_free(ssl);
|
||||||
|
SSL_CTX_free(ctx);
|
||||||
|
|
||||||
|
return testresult;
|
||||||
|
}
|
||||||
|
|
||||||
int setup_tests(void)
|
int setup_tests(void)
|
||||||
{
|
{
|
||||||
if (!TEST_ptr(certsdir = test_get_argument(0))
|
if (!TEST_ptr(certsdir = test_get_argument(0))
|
||||||
|
|
@ -6914,6 +6956,7 @@ int setup_tests(void)
|
||||||
ADD_TEST(test_sni_tls13);
|
ADD_TEST(test_sni_tls13);
|
||||||
#endif
|
#endif
|
||||||
ADD_TEST(test_set_alpn);
|
ADD_TEST(test_set_alpn);
|
||||||
|
ADD_TEST(test_inherit_verify_param);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue