diff options
Diffstat (limited to 'ckcapi.c')
-rw-r--r-- | ckcapi.c | 22 |
1 files changed, 12 insertions, 10 deletions
@@ -595,6 +595,9 @@ CC_C_OpenSession(CK_SLOT_ID id, CK_FLAGS flags, CK_VOID_PTR application, sess->notify_callback = notify; sess->user_data = application; + if(flags & CKF_RW_SESSION) + sess->read_write = TRUE; + ret = ckcapi_session_register(sess); if(ret == CKR_OK) { @@ -619,8 +622,7 @@ CC_C_CloseSession(CK_SESSION_HANDLE session) ENTER(C_CloseSession); PREREQ(cryptoki_initialized, CKR_CRYPTOKI_NOT_INITIALIZED); - /* The 'remove' flag removes it from the main session list */ - ret = ckcapi_session_get_lock_ref(session, 1, &sess); + ret = ckcapi_session_remove_lock_ref(session, &sess); if(ret == CKR_OK) { /* This will unref and possibly destroy the session */ @@ -794,7 +796,7 @@ CC_C_GetAttributeValue(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object, PREREQ(object, CKR_OBJECT_HANDLE_INVALID); PREREQ(!count || templ, CKR_ARGUMENTS_BAD); - ret = ckcapi_session_get_lock_ref(session, 0, &sess); + ret = ckcapi_session_get_lock_ref(session, FALSE, &sess); if(ret == CKR_OK) { ret = ckcapi_session_get_object_data_for(sess, object, &objdata); @@ -829,7 +831,7 @@ CC_C_FindObjectsInit(CK_SESSION_HANDLE session, CK_ATTRIBUTE_PTR templ, PREREQ(cryptoki_initialized, CKR_CRYPTOKI_NOT_INITIALIZED); PREREQ(!count || templ, CKR_ARGUMENTS_BAD); - ret = ckcapi_session_get_lock_ref(session, 0, &sess); + ret = ckcapi_session_get_lock_ref(session, FALSE, &sess); if(ret == CKR_OK) { ret = ckcapi_session_find_init(sess, templ, count); @@ -851,7 +853,7 @@ CC_C_FindObjects(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE_PTR objects, PREREQ(object_count, CKR_ARGUMENTS_BAD); PREREQ(!max_object_count || objects, CKR_ARGUMENTS_BAD); - ret = ckcapi_session_get_lock_ref(session, 0, &sess); + ret = ckcapi_session_get_lock_ref(session, FALSE, &sess); if(ret == CKR_OK) { ret = ckcapi_session_find(sess, objects, max_object_count, object_count); @@ -870,7 +872,7 @@ CC_C_FindObjectsFinal(CK_SESSION_HANDLE session) ENTER(C_FindObjectsFinal); PREREQ(cryptoki_initialized, CKR_CRYPTOKI_NOT_INITIALIZED); - ret = ckcapi_session_get_lock_ref(session, 0, &sess); + ret = ckcapi_session_get_lock_ref(session, FALSE, &sess); if(ret == CKR_OK) { ret = ckcapi_session_find_final(sess); @@ -938,7 +940,7 @@ CC_C_DecryptInit(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism, PREREQ(mechanism, CKR_ARGUMENTS_BAD); PREREQ(key, CKR_ARGUMENTS_BAD); - ret = ckcapi_session_get_lock_ref(session, 0, &sess); + ret = ckcapi_session_get_lock_ref(session, FALSE, &sess); if(ret == CKR_OK) { ret = ckcapi_session_get_object_data_for(sess, key, &objdata); @@ -963,7 +965,7 @@ CC_C_Decrypt(CK_SESSION_HANDLE session, CK_BYTE_PTR encrypted_data, PREREQ(encrypted_data, CKR_ARGUMENTS_BAD); PREREQ(encrypted_data_len, CKR_ARGUMENTS_BAD); - ret = ckcapi_session_get_lock_ref(session, 0, &sess); + ret = ckcapi_session_get_lock_ref(session, FALSE, &sess); if(ret == CKR_OK) { ret = ckcapi_session_decrypt(sess, encrypted_data, encrypted_data_len, @@ -1061,7 +1063,7 @@ CC_C_SignInit(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism, PREREQ(mechanism, CKR_ARGUMENTS_BAD); PREREQ(key, CKR_ARGUMENTS_BAD); - ret = ckcapi_session_get_lock_ref(session, 0, &sess); + ret = ckcapi_session_get_lock_ref(session, FALSE, &sess); if(ret == CKR_OK) { ret = ckcapi_session_get_object_data_for(sess, key, &objdata); @@ -1086,7 +1088,7 @@ CC_C_Sign(CK_SESSION_HANDLE session, CK_BYTE_PTR data, CK_ULONG data_len, PREREQ(data, CKR_ARGUMENTS_BAD); PREREQ(data_len, CKR_ARGUMENTS_BAD); - ret = ckcapi_session_get_lock_ref(session, 0, &sess); + ret = ckcapi_session_get_lock_ref(session, FALSE, &sess); if(ret == CKR_OK) { ret = ckcapi_session_sign(sess, data, data_len, signature, signature_len); |