diff options
author | Enji Cooper <ngie@FreeBSD.org> | 2025-05-07 21:18:24 +0000 |
---|---|---|
committer | Enji Cooper <ngie@FreeBSD.org> | 2025-05-07 22:37:22 +0000 |
commit | 29536654cc41bf41b92dc836c47496dc6fe0b00c (patch) | |
tree | 368a3c5b14e610bb5f6b71657f61a41e373eaf97 /test/conf_include_test.c | |
parent | 1c34280346af8284acdc0eae39496811d37df25d (diff) |
Diffstat (limited to 'test/conf_include_test.c')
-rw-r--r-- | test/conf_include_test.c | 77 |
1 files changed, 70 insertions, 7 deletions
diff --git a/test/conf_include_test.c b/test/conf_include_test.c index f6835d59e79e..74c5c72b64f5 100644 --- a/test/conf_include_test.c +++ b/test/conf_include_test.c @@ -1,5 +1,5 @@ /* - * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2025 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -37,28 +37,32 @@ #endif /* changes path to that of the filename */ -static int change_path(const char *file) +static char *change_path(const char *file) { char *s = OPENSSL_strdup(file); char *p = s; char *last = NULL; int ret = 0; + char *new_config_name = NULL; if (s == NULL) - return -1; + return NULL; while ((p = strpbrk(p, DIRSEP)) != NULL) { last = p++; } if (last == NULL) goto err; - last[DIRSEP_PRESERVE] = 0; + last[DIRSEP_PRESERVE] = 0; TEST_note("changing path to %s", s); + ret = chdir(s); + if (ret == 0) + new_config_name = OPENSSL_strdup(last + DIRSEP_PRESERVE + 1); err: OPENSSL_free(s); - return ret; + return new_config_name; } /* @@ -68,6 +72,9 @@ static int change_path(const char *file) static CONF *conf; static BIO *in; static int expect_failure = 0; +static int test_providers = 0; +static OSSL_LIB_CTX *libctx = NULL; +static char *rel_conf_file = NULL; static int test_load_config(void) { @@ -116,6 +123,27 @@ static int test_load_config(void) return 0; } + if (test_providers != 0) { + /* test for `active` directive in configuration file */ + val = 0; + if (!TEST_int_eq(NCONF_get_number(conf, "null_sect", "activate", &val), 1) + || !TEST_int_eq(val, 1)) { + TEST_note("null provider not activated"); + return 0; + } + val = 0; + if (!TEST_int_eq(NCONF_get_number(conf, "default_sect", "activate", &val), 1) + || !TEST_int_eq(val, 1)) { + TEST_note("default provider not activated"); + return 0; + } + val = 0; + if (!TEST_int_eq(NCONF_get_number(conf, "legacy_sect", "activate", &val), 1) + || !TEST_int_eq(val, 1)) { + TEST_note("legacy provider not activated"); + return 0; + } + } return 1; } @@ -174,10 +202,33 @@ static int test_check_overflow(void) return 1; } +static int test_available_providers(void) +{ + libctx = OSSL_LIB_CTX_new(); + if (!TEST_ptr(libctx)) + return 0; + + if (!TEST_ptr(rel_conf_file) || !OSSL_LIB_CTX_load_config(libctx, rel_conf_file)) { + TEST_note("Failed to load config"); + return 0; + } + + if (OSSL_PROVIDER_available(libctx, "default") != 1) { + TEST_note("Default provider is missing"); + return 0; + } + if (OSSL_PROVIDER_available(libctx, "legacy") != 1) { + TEST_note("Legacy provider is missing"); + return 0; + } + return 1; +} + typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_FAIL, + OPT_TEST_PROV, OPT_TEST_ENUM } OPTION_CHOICE; @@ -186,6 +237,8 @@ const OPTIONS *test_get_options(void) static const OPTIONS test_options[] = { OPT_TEST_OPTIONS_WITH_EXTRA_USAGE("conf_file\n"), { "f", OPT_FAIL, '-', "A failure is expected" }, + { "providers", OPT_TEST_PROV, '-', + "Test for activated default and legacy providers"}, { NULL } }; return test_options; @@ -193,7 +246,7 @@ const OPTIONS *test_get_options(void) int setup_tests(void) { - const char *conf_file; + char *conf_file = NULL; OPTION_CHOICE o; if (!TEST_ptr(conf = NCONF_new(NULL))) @@ -204,6 +257,8 @@ int setup_tests(void) case OPT_FAIL: expect_failure = 1; break; + case OPT_TEST_PROV: + test_providers = 1; case OPT_TEST_CASES: break; default: @@ -222,16 +277,24 @@ int setup_tests(void) * For this test we need to chdir as we use relative * path names in the config files. */ - change_path(conf_file); + rel_conf_file = change_path(conf_file); + if (!TEST_ptr(rel_conf_file)) { + TEST_note("Unable to change path"); + return 0; + } ADD_TEST(test_load_config); ADD_TEST(test_check_null_numbers); ADD_TEST(test_check_overflow); + if (test_providers != 0) + ADD_TEST(test_available_providers); + return 1; } void cleanup_tests(void) { + OPENSSL_free(rel_conf_file); BIO_vfree(in); NCONF_free(conf); CONF_modules_unload(1); |