summaryrefslogtreecommitdiff
path: root/src/object.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/object.c')
-rw-r--r--src/object.c29
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));