Add test for OSSL_PROVIDER_load with module path set

Ensure that, with the modulepath setting set in a config field, that we
are able to load a provider from the path relative to OPENSSL_MODULES

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/24025)
This commit is contained in:
Neil Horman 2024-04-03 15:18:33 -04:00 committed by Tomas Mraz
parent bc9595963a
commit 91a77cbf66
4 changed files with 69 additions and 2 deletions

View File

@ -1092,6 +1092,7 @@ IF[{- !$disabled{tests} -}]
ENDIF
IF[{- $disabled{module} || !$target{dso_scheme} -}]
DEFINE[provider_test]=NO_PROVIDER_MODULE
DEFINE[prov_config_test]=NO_PROVIDER_MODULE
DEFINE[provider_internal_test]=NO_PROVIDER_MODULE
ENDIF
DEPEND[]=provider_internal_test.cnf

22
test/pathed.cnf Normal file
View File

@ -0,0 +1,22 @@
openssl_conf = openssl_init
# Comment out the next line to ignore configuration errors
config_diagnostics = 1
[openssl_init]
providers = provider_sect
[provider_sect]
default = default_sect
legacy = legacy_sect
test = test_sect
[test_sect]
module = ../test/p_test.so
activate = false
[default_sect]
activate = true
[legacy_sect]
activate = false

View File

@ -13,6 +13,7 @@
static char *configfile = NULL;
static char *recurseconfigfile = NULL;
static char *pathedconfig = NULL;
/*
* Test to make sure there are no leaks or failures from loading the config
@ -70,6 +71,34 @@ static int test_recursive_config(void)
return testresult;
}
#if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MACOSX) && !defined(NO_PROVIDER_MODULE)
static int test_path_config(void)
{
OSSL_LIB_CTX *ctx = OSSL_LIB_CTX_new();
OSSL_PROVIDER *prov;
int testresult = 0;
if (!TEST_ptr(pathedconfig))
return 0;
if (!TEST_ptr(ctx))
return 0;
if (!TEST_true(OSSL_LIB_CTX_load_config(ctx, pathedconfig)))
goto err;
/* attempt to manually load the test provider */
if (!TEST_ptr(prov = OSSL_PROVIDER_load(ctx, "test")))
goto err;
OSSL_PROVIDER_unload(prov);
testresult = 1;
err:
OSSL_LIB_CTX_free(ctx);
return testresult;
}
#endif
OPT_TEST_DECLARE_USAGE("configfile\n")
int setup_tests(void)
@ -85,7 +114,20 @@ int setup_tests(void)
if (!TEST_ptr(recurseconfigfile = test_get_argument(1)))
return 0;
if (!TEST_ptr(pathedconfig = test_get_argument(2)))
return 0;
ADD_TEST(test_recursive_config);
ADD_TEST(test_double_config);
#if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MACOSX) && !defined(NO_PROVIDER_MODULE)
/*
* This test has to specify a module path to a file
* Which is setup as ../test/p_test.so
* Since windows/macos doesn't build with that extension
* just skip the test here
* Additionally skip it if we're not building provider modules
*/
ADD_TEST(test_path_config);
#endif
return 1;
}

View File

@ -23,13 +23,15 @@ my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
plan tests => 2;
ok(run(test(["prov_config_test", srctop_file("test", "default.cnf"),
srctop_file("test", "recursive.cnf")])),
srctop_file("test", "recursive.cnf"),
srctop_file("test", "pathed.cnf")])),
"running prov_config_test default.cnf");
SKIP: {
skip "Skipping FIPS test in this build", 1 if $no_fips;
ok(run(test(["prov_config_test", srctop_file("test", "fips.cnf"),
srctop_file("test", "recursive.cnf")])),
srctop_file("test", "recursive.cnf"),
srctop_file("test", "pathed.cnf")])),
"running prov_config_test fips.cnf");
}