diff --git a/src/pkcs11/misc.c b/src/pkcs11/misc.c index b3405fa9..1ec279b7 100644 --- a/src/pkcs11/misc.c +++ b/src/pkcs11/misc.c @@ -85,8 +85,9 @@ void dump_template(const char *info, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCoun } /* Pool */ -CK_RV pool_initialize(struct sc_pkcs11_pool *pool) +CK_RV pool_initialize(struct sc_pkcs11_pool *pool, int type) { + pool->type = type; pool->next_free_handle = 1; pool->num_items = 0; pool->head = pool->tail = NULL; @@ -132,7 +133,8 @@ CK_RV pool_find(struct sc_pkcs11_pool *pool, CK_ULONG handle, void **item_ptr) } } - return CKR_FUNCTION_FAILED; + return (pool->type == POOL_TYPE_OBJECT)? CKR_OBJECT_HANDLE_INVALID + : CKR_SESSION_HANDLE_INVALID; } CK_RV pool_find_and_delete(struct sc_pkcs11_pool *pool, CK_ULONG handle, void **item_ptr) @@ -156,7 +158,8 @@ CK_RV pool_find_and_delete(struct sc_pkcs11_pool *pool, CK_ULONG handle, void ** } } - return CKR_FUNCTION_FAILED; + return (pool->type == POOL_TYPE_OBJECT)? CKR_OBJECT_HANDLE_INVALID + : CKR_SESSION_HANDLE_INVALID; } /* Session manipulation */ diff --git a/src/pkcs11/pkcs11-global.c b/src/pkcs11/pkcs11-global.c index f8d1789d..c4cfadd9 100644 --- a/src/pkcs11/pkcs11-global.c +++ b/src/pkcs11/pkcs11-global.c @@ -41,7 +41,7 @@ CK_RV C_Initialize(CK_VOID_PTR pReserved) if (rc != 0) return CKR_DEVICE_ERROR; - pool_initialize(&session_pool); + pool_initialize(&session_pool, POOL_TYPE_SESSION); for (i=0; iid = id; slot->login_user = -1; clear_slot_info(&slot->slot_info); - pool_initialize(&slot->object_pool); + pool_initialize(&slot->object_pool, POOL_TYPE_OBJECT); return CKR_OK; }