diff options
author | Stef Walter <stef@memberwebs.com> | 2008-12-23 20:46:26 +0000 |
---|---|---|
committer | Stef Walter <stef@memberwebs.com> | 2008-12-23 20:46:26 +0000 |
commit | 0737b441028a761dab7246ca32cb7d494d5c2f22 (patch) | |
tree | cace849e1c6144918a50c96f3f9ff09247f93545 /src/object.c | |
parent | cd91ec0ef91028fb7e42cfaeab58bca46b8ca972 (diff) |
Support virtual slots, context specific logins, and other fixes.
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)); |