Skip to content

Commit

Permalink
Add test for OSSL_PROVIDER_load with module path set
Browse files Browse the repository at this point in the history
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>

(cherry picked from commit 91a77cb)

(Merged from #24198)
  • Loading branch information
nhorman authored and t8m committed Apr 26, 2024
1 parent 71e5bb9 commit db16324
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 2 deletions.
1 change: 1 addition & 0 deletions test/build.info
Original file line number Diff line number Diff line change
Expand Up @@ -874,6 +874,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
Expand Down
22 changes: 22 additions & 0 deletions test/pathed.cnf
Original file line number Diff line number Diff line change
@@ -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
42 changes: 42 additions & 0 deletions test/prov_config_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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;
}
6 changes: 4 additions & 2 deletions test/recipes/30-test_prov_config.t
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}

0 comments on commit db16324

Please sign in to comment.