]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Add test for OSSL_PROVIDER_load with module path set
authorNeil Horman <nhorman@openssl.org>
Wed, 3 Apr 2024 19:18:33 +0000 (15:18 -0400)
committerTomas Mraz <tomas@openssl.org>
Thu, 18 Apr 2024 16:38:39 +0000 (18:38 +0200)
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)

test/build.info
test/pathed.cnf [new file with mode: 0644]
test/prov_config_test.c
test/recipes/30-test_prov_config.t

index 969e81c2ccc0ea97b4e232499a92ca17b9143224..52bc392f1206e4395375ceda744123ea3fc4adc9 100644 (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
diff --git a/test/pathed.cnf b/test/pathed.cnf
new file mode 100644 (file)
index 0000000..07bdc1f
--- /dev/null
@@ -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
index b44ec78d8d24b4e068642a80c82f89e94bb86cc3..d59a9546679d2e230ff3348789b38d6207a9f611 100644 (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;
 }
index 7f6350fd84e1161eb1b5135d08d49c0dc180333d..8884d07f3af910f1ff5542ab6a14650d881b8741 100644 (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");
 }