From 58cede114664e839b53d923863bff604ce58b1a7 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Wed, 15 May 2019 16:17:43 +0200 Subject: proxy: Refresh slot list on every C_GetSlotList call Previously, the proxy module calculated the slot list only once at the C_Initialize() call. That was causing a usability limitation when the user attaches HSM after starting an application. Suggested by David Ward. --- p11-kit/test-proxy.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'p11-kit/test-proxy.c') diff --git a/p11-kit/test-proxy.c b/p11-kit/test-proxy.c index bf894f8..f61f37e 100644 --- a/p11-kit/test-proxy.c +++ b/p11-kit/test-proxy.c @@ -233,6 +233,7 @@ teardown (void *unused) #define TWO_MODULE "module: mock-two" SHLEXT "\n" #define ENABLED "enable-in: test-proxy, p11-kit-proxy\n" #define DISABLED "disable-in: p11-kit-proxy\n" +#define EIGHT_MODULE "module: mock-eight" SHLEXT "\n" static CK_ULONG load_modules_and_count_slots (void) @@ -311,6 +312,37 @@ test_disable (void) assert_num_cmp (disabled, <, count); } +static void +test_slot_appear (void) +{ + CK_FUNCTION_LIST_PTR proxy; + CK_ULONG count; + CK_RV rv; + + p11_test_file_write (test.directory, "eight.module", EIGHT_MODULE, strlen (EIGHT_MODULE)); + + rv = C_GetFunctionList (&proxy); + assert (rv == CKR_OK); + + assert (p11_proxy_module_check (proxy)); + + rv = proxy->C_Initialize (NULL); + assert (rv == CKR_OK); + + rv = proxy->C_GetSlotList (CK_TRUE, NULL, &count); + assert (rv == CKR_OK); + assert_num_eq (count, 0); + + rv = proxy->C_GetSlotList (CK_TRUE, NULL, &count); + assert (rv == CKR_OK); + assert_num_eq (count, 1); + + rv = proxy->C_Finalize (NULL); + assert_num_eq (rv, CKR_OK); + + p11_proxy_module_cleanup (); +} + static CK_FUNCTION_LIST_PTR setup_mock_module (CK_SESSION_HANDLE *session) { @@ -388,7 +420,6 @@ main (int argc, { p11_library_init (); p11_kit_be_quiet (); - p11_test (test_initialize_finalize, "/proxy/initialize-finalize"); p11_test (test_initialize_multiple, "/proxy/initialize-multiple"); #ifndef _WIN32 @@ -398,6 +429,7 @@ main (int argc, p11_fixture (setup, teardown); p11_test (test_disable, "/proxy/disable"); p11_test (test_no_slot, "/proxy/no-slot"); + p11_test (test_slot_appear, "/proxy/slot-appear"); test_mock_add_tests ("/proxy"); -- cgit v1.1