pkcs11: hide empty slots ...
The list of slots returned by C_GetSlotList() contains: - if present, virtual hotplug slot; - any slot with token; - without token(s), one empty slot per reader; git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@5421 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
822fdc7f38
commit
dc55351767
|
@ -361,6 +361,7 @@ CK_RV C_GetSlotList(CK_BBOOL tokenPresent, /* only slots with token prese
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
CK_ULONG numMatches;
|
CK_ULONG numMatches;
|
||||||
sc_pkcs11_slot_t *slot;
|
sc_pkcs11_slot_t *slot;
|
||||||
|
sc_reader_t *prev_reader = NULL;
|
||||||
CK_RV rv;
|
CK_RV rv;
|
||||||
|
|
||||||
if (pulCount == NULL_PTR)
|
if (pulCount == NULL_PTR)
|
||||||
|
@ -390,11 +391,18 @@ CK_RV C_GetSlotList(CK_BBOOL tokenPresent, /* only slots with token prese
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prev_reader = NULL;
|
||||||
numMatches = 0;
|
numMatches = 0;
|
||||||
for (i=0; i<list_size(&virtual_slots); i++) {
|
for (i=0; i<list_size(&virtual_slots); i++) {
|
||||||
slot = (sc_pkcs11_slot_t *) list_get_at(&virtual_slots, i);
|
slot = (sc_pkcs11_slot_t *) list_get_at(&virtual_slots, i);
|
||||||
if (!tokenPresent || (slot->slot_info.flags & CKF_TOKEN_PRESENT))
|
/* the list of available slots contains:
|
||||||
|
* - if present, virtual hotplug slot;
|
||||||
|
* - any slot with token;
|
||||||
|
* - without token(s), one empty slot per reader;
|
||||||
|
*/
|
||||||
|
if (!slot->reader || (!tokenPresent && slot->reader != prev_reader) || (slot->slot_info.flags & CKF_TOKEN_PRESENT))
|
||||||
found[numMatches++] = slot->id;
|
found[numMatches++] = slot->id;
|
||||||
|
prev_reader = slot->reader;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pSlotList == NULL_PTR) {
|
if (pSlotList == NULL_PTR) {
|
||||||
|
|
Loading…
Reference in New Issue