From 85f9d306832964f6d6412392f335e1fa3f3efd8b Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Mon, 2 Apr 2012 15:36:34 +0200 Subject: Add tests for enable-in and disable-in --- p11-kit/Makefile.am | 8 +-- p11-kit/modules.c | 4 +- tests/Makefile.am | 4 +- tests/conf-test.c | 16 ++--- tests/files/system-modules/two | 4 +- tests/files/system-pkcs11.conf | 3 + tests/files/user-modules/three | 4 +- tests/test-modules.c | 156 ++++++++++++++++++++++++++++++++++++++--- 8 files changed, 171 insertions(+), 28 deletions(-) create mode 100644 tests/files/system-pkcs11.conf diff --git a/p11-kit/Makefile.am b/p11-kit/Makefile.am index cd445f1..8605c15 100644 --- a/p11-kit/Makefile.am +++ b/p11-kit/Makefile.am @@ -58,10 +58,10 @@ libp11_kit_testable_la_LDFLAGS = \ libp11_kit_testable_la_SOURCES = $(MODULE_SRCS) libp11_kit_testable_la_CFLAGS = \ - -DP11_SYSTEM_CONFIG_FILE=\""$(abs_top_builddir)/tests/files/system-pkcs11.conf"\" \ - -DP11_SYSTEM_CONFIG_MODULES=\""$(abs_top_builddir)/tests/files/system-modules"\" \ - -DP11_USER_CONFIG_FILE=\""$(abs_top_builddir)/tests/files/user-pkcs11.conf"\" \ - -DP11_USER_CONFIG_MODULES=\""$(abs_top_builddir)/tests/files/user-modules"\" \ + -DP11_SYSTEM_CONFIG_FILE=\""$(abs_top_srcdir)/tests/files/system-pkcs11.conf"\" \ + -DP11_SYSTEM_CONFIG_MODULES=\""$(abs_top_srcdir)/tests/files/system-modules"\" \ + -DP11_USER_CONFIG_FILE=\""$(abs_top_srcdir)/tests/files/user-pkcs11.conf"\" \ + -DP11_USER_CONFIG_MODULES=\""$(abs_top_srcdir)/tests/files/user-modules"\" \ -DP11_MODULE_PATH=\""$(abs_top_builddir)/tests/.libs"\" \ $(NULL) diff --git a/p11-kit/modules.c b/p11-kit/modules.c index 569a735..0498708 100644 --- a/p11-kit/modules.c +++ b/p11-kit/modules.c @@ -734,7 +734,7 @@ _p11_kit_initialize_registered_unlocked_reentrant (void) while (_p11_hash_next (&iter, NULL, (void **)&mod)) { /* Skip all modules that aren't registered */ - if (!mod->name) + if (mod->name == NULL || !is_module_enabled_unlocked (mod->name, mod->config)) continue; rv = initialize_module_unlocked_reentrant (mod); @@ -1000,7 +1000,7 @@ p11_kit_registered_name_to_module (const char *name) if (gl.modules) { mod = find_module_for_name_unlocked (name); - if (mod) + if (mod != NULL && is_module_enabled_unlocked (name, mod->config)) module = mod->funcs; } diff --git a/tests/Makefile.am b/tests/Makefile.am index 1e71108..711a3fb 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -50,7 +50,7 @@ mock_one_la_SOURCES = \ mock-module-ep.c mock_one_la_LIBADD = \ - $(top_srcdir)/p11-kit/libp11-kit-compat.la + $(top_builddir)/p11-kit/libp11-kit-compat.la mock_one_la_LDFLAGS = \ -module -avoid-version -rpath /nowhere \ @@ -58,9 +58,11 @@ mock_one_la_LDFLAGS = \ mock_two_la_SOURCES = $(mock_one_la_SOURCES) mock_two_la_LDFLAGS = $(mock_one_la_LDFLAGS) +mock_two_la_LIBADD = $(mock_one_la_LIBADD) mock_three_la_SOURCES = $(mock_one_la_SOURCES) mock_three_la_LDFLAGS = $(mock_one_la_LDFLAGS) +mock_three_la_LIBADD = $(mock_one_la_LIBADD) EXTRA_DIST = \ cutest \ diff --git a/tests/conf-test.c b/tests/conf-test.c index 2934c0f..eb04c71 100644 --- a/tests/conf-test.c +++ b/tests/conf-test.c @@ -262,17 +262,17 @@ test_load_modules_merge (CuTest *tc) config = _p11_hash_get (configs, "one"); CuAssertPtrNotNull (tc, config); - CuAssertStrEquals (tc, _p11_hash_get (config, "module"), "mock-one.la"); + CuAssertStrEquals (tc, "mock-one.so", _p11_hash_get (config, "module")); CuAssertStrEquals (tc, _p11_hash_get (config, "setting"), "user1"); config = _p11_hash_get (configs, "two"); CuAssertPtrNotNull (tc, config); - CuAssertStrEquals (tc, _p11_hash_get (config, "module"), "mock-two.la"); + CuAssertStrEquals (tc, "mock-two.so", _p11_hash_get (config, "module")); CuAssertStrEquals (tc, _p11_hash_get (config, "setting"), "system2"); config = _p11_hash_get (configs, "three"); CuAssertPtrNotNull (tc, config); - CuAssertStrEquals (tc, _p11_hash_get (config, "module"), "mock-three.la"); + CuAssertStrEquals (tc, "mock-three.so", _p11_hash_get (config, "module")); CuAssertStrEquals (tc, _p11_hash_get (config, "setting"), "user3"); _p11_hash_free (configs); @@ -294,12 +294,12 @@ test_load_modules_user_none (CuTest *tc) config = _p11_hash_get (configs, "one"); CuAssertPtrNotNull (tc, config); - CuAssertStrEquals (tc, _p11_hash_get (config, "module"), "mock-one.la"); + CuAssertStrEquals (tc, "mock-one.so", _p11_hash_get (config, "module")); CuAssertStrEquals (tc, _p11_hash_get (config, "setting"), "system1"); config = _p11_hash_get (configs, "two"); CuAssertPtrNotNull (tc, config); - CuAssertStrEquals (tc, _p11_hash_get (config, "module"), "mock-two.la"); + CuAssertStrEquals (tc, "mock-two.so", _p11_hash_get (config, "module")); CuAssertStrEquals (tc, _p11_hash_get (config, "setting"), "system2"); config = _p11_hash_get (configs, "three"); @@ -332,7 +332,7 @@ test_load_modules_user_only (CuTest *tc) config = _p11_hash_get (configs, "three"); CuAssertPtrNotNull (tc, config); - CuAssertStrEquals (tc, _p11_hash_get (config, "module"), "mock-three.la"); + CuAssertStrEquals (tc, "mock-three.so", _p11_hash_get (config, "module")); CuAssertStrEquals (tc, _p11_hash_get (config, "setting"), "user3"); _p11_hash_free (configs); @@ -354,12 +354,12 @@ test_load_modules_no_user (CuTest *tc) config = _p11_hash_get (configs, "one"); CuAssertPtrNotNull (tc, config); - CuAssertStrEquals (tc, _p11_hash_get (config, "module"), "mock-one.la"); + CuAssertStrEquals (tc, "mock-one.so", _p11_hash_get (config, "module")); CuAssertStrEquals (tc, _p11_hash_get (config, "setting"), "system1"); config = _p11_hash_get (configs, "two"); CuAssertPtrNotNull (tc, config); - CuAssertStrEquals (tc, _p11_hash_get (config, "module"), "mock-two.la"); + CuAssertStrEquals (tc, "mock-two.so", _p11_hash_get (config, "module")); CuAssertStrEquals (tc, _p11_hash_get (config, "setting"), "system2"); config = _p11_hash_get (configs, "three"); diff --git a/tests/files/system-modules/two b/tests/files/system-modules/two index 0bfa3ca..f391757 100644 --- a/tests/files/system-modules/two +++ b/tests/files/system-modules/two @@ -1,3 +1,5 @@ module: mock-two.so -setting: system2 \ No newline at end of file +setting: system2 + +disable-in: test-disable, test-other \ No newline at end of file diff --git a/tests/files/system-pkcs11.conf b/tests/files/system-pkcs11.conf new file mode 100644 index 0000000..20741e7 --- /dev/null +++ b/tests/files/system-pkcs11.conf @@ -0,0 +1,3 @@ + +# Merge in user config +user-config: merge \ No newline at end of file diff --git a/tests/files/user-modules/three b/tests/files/user-modules/three index 70c5e03..00caab5 100644 --- a/tests/files/user-modules/three +++ b/tests/files/user-modules/three @@ -1,3 +1,5 @@ module: mock-three.so -setting: user3 \ No newline at end of file +setting: user3 + +enable-in: test-enable \ No newline at end of file diff --git a/tests/test-modules.c b/tests/test-modules.c index 10e0969..1debed0 100644 --- a/tests/test-modules.c +++ b/tests/test-modules.c @@ -44,6 +44,31 @@ #include "private.h" #include "hashmap.h" +static CK_FUNCTION_LIST_PTR_PTR +initialize_and_get_modules (CuTest *tc) +{ + CK_FUNCTION_LIST_PTR_PTR modules; + CK_RV rv; + + rv = p11_kit_initialize_registered (); + CuAssertIntEquals (tc, CKR_OK, rv); + modules = p11_kit_registered_modules (); + CuAssertTrue (tc, modules != NULL && modules[0] != NULL); + + return modules; +} + +static void +finalize_and_free_modules (CuTest *tc, + CK_FUNCTION_LIST_PTR_PTR modules) +{ + CK_RV rv; + + free (modules); + rv = p11_kit_finalize_registered (); + CuAssertIntEquals (tc, CKR_OK, rv); +} + static void test_no_duplicates (CuTest *tc) { @@ -51,20 +76,13 @@ test_no_duplicates (CuTest *tc) hashmap *paths; hashmap *funcs; char *path; - CK_RV rv; int i; - /* The loaded modules should contain duplicates */ - - rv = p11_kit_initialize_registered (); - CuAssertIntEquals (tc, CKR_OK, rv); - + modules = initialize_and_get_modules (tc); paths = _p11_hash_create (_p11_hash_string_hash, _p11_hash_string_equal, NULL, NULL); funcs = _p11_hash_create (_p11_hash_direct_hash, _p11_hash_direct_equal, NULL, NULL); - modules = p11_kit_registered_modules (); - CuAssertTrue (tc, modules != NULL && modules[0] != NULL); - + /* The loaded modules should not contain duplicates */ for (i = 0; modules[i] != NULL; i++) { path = p11_kit_registered_option (modules[i], "module"); @@ -81,10 +99,123 @@ test_no_duplicates (CuTest *tc) _p11_hash_free (paths); _p11_hash_free (funcs); - free (modules); + finalize_and_free_modules (tc, modules); +} - rv = p11_kit_finalize_registered (); +static CK_FUNCTION_LIST_PTR +lookup_module_with_name (CuTest *tc, + CK_FUNCTION_LIST_PTR_PTR modules, + const char *name) +{ + CK_FUNCTION_LIST_PTR match = NULL; + CK_FUNCTION_LIST_PTR module; + char *module_name; + int i; + + for (i = 0; match == NULL && modules[i] != NULL; i++) { + module_name = p11_kit_registered_module_to_name (modules[i]); + CuAssertPtrNotNull (tc, module_name); + if (strcmp (module_name, name) == 0) + match = modules[i]; + free (module_name); + } + + /* + * As a side effect, we should check that the results of this function + * matches the above search. + */ + module = p11_kit_registered_name_to_module (name); + CuAssert(tc, "different result from p11_kit_registered_name_to_module()", + module == match); + + return match; +} + +static void +test_disable (CuTest *tc) +{ + CK_FUNCTION_LIST_PTR_PTR modules; + + /* + * The module two should be present, as we don't match any prognames + * that it has disabled. + */ + + modules = initialize_and_get_modules (tc); + CuAssertTrue (tc, lookup_module_with_name (tc, modules, "two") != NULL); + finalize_and_free_modules (tc, modules); + + /* + * The module two shouldn't have been loaded, because in its config + * file we have: + * + * disable-in: test-disable + */ + + p11_kit_set_progname ("test-disable"); + + modules = initialize_and_get_modules (tc); + CuAssertTrue (tc, lookup_module_with_name (tc, modules, "two") == NULL); + finalize_and_free_modules (tc, modules); + + p11_kit_set_progname (NULL); +} + +static void +test_disable_later (CuTest *tc) +{ + CK_FUNCTION_LIST_PTR_PTR modules; + CK_RV rv; + + /* + * The module two shouldn't be matched, because in its config + * file we have: + * + * disable-in: test-disable + */ + + rv = p11_kit_initialize_registered (); CuAssertIntEquals (tc, CKR_OK, rv); + + p11_kit_set_progname ("test-disable"); + + modules = p11_kit_registered_modules (); + CuAssertTrue (tc, modules != NULL && modules[0] != NULL); + + CuAssertTrue (tc, lookup_module_with_name (tc, modules, "two") == NULL); + finalize_and_free_modules (tc, modules); + + p11_kit_set_progname (NULL); +} + +static void +test_enable (CuTest *tc) +{ + CK_FUNCTION_LIST_PTR_PTR modules; + + /* + * The module three should not be present, as we don't match the current + * program. + */ + + modules = initialize_and_get_modules (tc); + CuAssertTrue (tc, lookup_module_with_name (tc, modules, "three") == NULL); + finalize_and_free_modules (tc, modules); + + /* + * The module three should be loaded here , because in its config + * file we have: + * + * enable-in: test-enable + */ + + p11_kit_set_progname ("test-enable"); + + modules = initialize_and_get_modules (tc); + CuAssertTrue (tc, lookup_module_with_name (tc, modules, "three") != NULL); + finalize_and_free_modules (tc, modules); + + p11_kit_set_progname (NULL); } int @@ -97,6 +228,9 @@ main (void) _p11_library_init (); SUITE_ADD_TEST (suite, test_no_duplicates); + SUITE_ADD_TEST (suite, test_disable); + SUITE_ADD_TEST (suite, test_disable_later); + SUITE_ADD_TEST (suite, test_enable); p11_kit_be_quiet (); -- cgit v1.2.1