diff options
Diffstat (limited to 'src/object.c')
-rw-r--r-- | src/object.c | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/src/object.c b/src/object.c index c0b8aa6..accb444 100644 --- a/src/object.c +++ b/src/object.c @@ -85,8 +85,10 @@ test_find_objects(CK_SESSION_HANDLE session) { CK_OBJECT_HANDLE objects[1024]; CK_OBJECT_HANDLE extra; - CK_ATTRIBUTE dummy; - CK_ULONG object_count, count; + CK_ATTRIBUTE attr; + CK_SESSION_INFO sinfo; + CK_ULONG object_count, count, i; + CK_BBOOL is_private; CK_RV rv; assert(p11t_module_funcs); @@ -95,7 +97,7 @@ test_find_objects(CK_SESSION_HANDLE session) if(p11t_test_unexpected) { - rv = (p11t_module_funcs->C_FindObjectsInit)((CK_SESSION_HANDLE)-99, &dummy, 0); + rv = (p11t_module_funcs->C_FindObjectsInit)((CK_SESSION_HANDLE)-99, &attr, 0); P11T_CHECK_RV("Invalid session", rv, CKR_SESSION_HANDLE_INVALID); rv = (p11t_module_funcs->C_FindObjectsInit)(session, NULL, 1); @@ -103,12 +105,12 @@ test_find_objects(CK_SESSION_HANDLE session) } - rv = (p11t_module_funcs->C_FindObjectsInit)(session, &dummy, 0); + rv = (p11t_module_funcs->C_FindObjectsInit)(session, &attr, 0); P11T_CHECK_RV("Find all objects", rv, CKR_OK); if(p11t_test_unexpected) { - rv = (p11t_module_funcs->C_FindObjectsInit)(session, &dummy, 0); + rv = (p11t_module_funcs->C_FindObjectsInit)(session, &attr, 0); P11T_CHECK_RV("Double call", rv, CKR_OPERATION_ACTIVE); } @@ -136,6 +138,23 @@ test_find_objects(CK_SESSION_HANDLE session) } while(count == 1024); + /* Get the session state */ + rv = (p11t_module_funcs->C_GetSessionInfo) (session, &sinfo); + P11T_CHECK_RV("Check private objects not found in public session", rv, CKR_OK); + + /* Check that they're not private, if the session is logged in */ + if (sinfo.state == CKS_RO_PUBLIC_SESSION || sinfo.state == CKS_RW_PUBLIC_SESSION) { + for (i = 0; i < count; ++i) { + attr.type = CKA_PRIVATE; + attr.ulValueLen = sizeof (is_private); + attr.pValue = &is_private; + rv = (p11t_module_funcs->C_GetAttributeValue) (session, objects[i], &attr, 1); + P11T_CHECK_RV("Check private objects not found in public session", rv, CKR_OK); + if (is_private) + P11T_CHECK_FAIL("Check private objects not found in public session"); + } + } + if(p11t_test_unexpected) { rv = (p11t_module_funcs->C_FindObjects(session, &extra, 1, &count)); |