pkcsconf currently prints all token/slot info for every slot available. This happens even when providing -c <slot_id>. This patch makes pkcsconf print only 1 slot/token's info if -c is provided.
Signed-off-by: Kent Yoder <[email protected]> usr/sbin/pkcsconf/pkcsconf.c | 187 +++++++++++++++++++++++++----------------- 1 files changed, 113 insertions(+), 74 deletions(-) diff --git a/usr/sbin/pkcsconf/pkcsconf.c b/usr/sbin/pkcsconf/pkcsconf.c index ecbf7e0..9cca23f 100755 --- a/usr/sbin/pkcsconf/pkcsconf.c +++ b/usr/sbin/pkcsconf/pkcsconf.c @@ -338,8 +338,8 @@ int get_pin(CK_CHAR **); CK_RV cleanup(void); CK_RV display_pkcs11_info(void); CK_RV get_slot_list(int, CK_CHAR_PTR); -CK_RV display_slot_info(void); -CK_RV display_token_info(void); +CK_RV display_slot_info(int); +CK_RV display_token_info(int); CK_RV display_mechanism_info(void); void display_shared_memory(void); void *attach_shared_memory(void); @@ -482,11 +482,11 @@ main(int argc, char *argv[]){ /* If the user wants to display token info call the function to do so */ if (flags & CFG_TOKEN_INFO) - display_token_info(); + display_token_info((flags & CFG_SLOT) ? in_slot : -1); /* If the user wants to display slot info call the function to do so */ if (flags & CFG_SLOT_INFO) - display_slot_info(); + display_slot_info((flags & CFG_SLOT) ? in_slot : -1); /* If the user wants to display slot info call the function to do so */ if (flags & CFG_LIST_SLOT) @@ -944,12 +944,50 @@ display_mechanism_info(void){ return CKR_OK; } +void +print_slot_info(int slot_id, CK_SLOT_INFO *SlotInfo) +{ + /* Display the slot information */ + printf(PKCSINIT_MSG(SLOTINFO, "Slot #%d Info\n"), slot_id); + printf(PKCSINIT_MSG(SLOTDESC, "\tDescription: %.64s\n"), SlotInfo->slotDescription); + printf(PKCSINIT_MSG(MANUFACT, "\tManufacturer: %.32s\n"), SlotInfo->manufacturerID); + printf(PKCSINIT_MSG(FLAGS, "\tFlags: 0x%X ("), SlotInfo->flags); + + if (SlotInfo->flags & CKF_TOKEN_PRESENT) + printf(PKCSINIT_MSG(FLAGS, "TOKEN_PRESENT|")); + if (SlotInfo->flags & CKF_REMOVABLE_DEVICE) + printf(PKCSINIT_MSG(FLAGS, "REMOVABLE_DEVICE|")); + if (SlotInfo->flags & CKF_HW_SLOT) + printf(PKCSINIT_MSG(FLAGS, "HW_SLOT|")); + printf(")\n"); + + printf(PKCSINIT_MSG(HWVERSION, "\tHardware Version: %d.%d\n"), + SlotInfo->hardwareVersion.major, + SlotInfo->hardwareVersion.minor); + printf(PKCSINIT_MSG(FWVERSION, "\tFirmware Version: %d.%d\n"), + SlotInfo->firmwareVersion.major, + SlotInfo->firmwareVersion.minor); +} + CK_RV -display_slot_info(void){ +display_slot_info(int slot_id) +{ CK_RV rc; // Return Code CK_SLOT_INFO SlotInfo; // Structure to hold slot information unsigned int lcv; // Loop control Variable + if (slot_id != -1) { + rc = FunctionPtr->C_GetSlotInfo(slot_id, &SlotInfo); + if (rc != CKR_OK) { + printf(PKCSINIT_MSG(SLOTERROR2, "Error getting slot info: 0x%X (%s) \n"), rc, + p11_get_ckr(rc)); + return rc; + } + + print_slot_info(slot_id, &SlotInfo); + return CKR_OK; + } + for (lcv = 0; lcv < SlotCount; lcv++){ /* Get the info for the slot we are examining and store in SlotInfo*/ rc = FunctionPtr->C_GetSlotInfo(SlotList[lcv], &SlotInfo); @@ -958,26 +996,8 @@ display_slot_info(void){ return rc; } - /* Display the slot information */ - printf(PKCSINIT_MSG(SLOTINFO, "Slot #%d Info\n"), SlotList[lcv]); - printf(PKCSINIT_MSG(SLOTDESC, "\tDescription: %.64s\n"), SlotInfo.slotDescription); - printf(PKCSINIT_MSG(MANUFACT, "\tManufacturer: %.32s\n"), SlotInfo.manufacturerID); - printf(PKCSINIT_MSG(FLAGS, "\tFlags: 0x%X ("), SlotInfo.flags); + print_slot_info(SlotList[lcv], &SlotInfo); - if (SlotInfo.flags & CKF_TOKEN_PRESENT) - printf(PKCSINIT_MSG(FLAGS, "TOKEN_PRESENT|")); - if (SlotInfo.flags & CKF_REMOVABLE_DEVICE) - printf(PKCSINIT_MSG(FLAGS, "REMOVABLE_DEVICE|")); - if (SlotInfo.flags & CKF_HW_SLOT) - printf(PKCSINIT_MSG(FLAGS, "HW_SLOT|")); - printf(")\n"); - - printf(PKCSINIT_MSG(HWVERSION, "\tHardware Version: %d.%d\n"), - SlotInfo.hardwareVersion.major, - SlotInfo.hardwareVersion.minor); - printf(PKCSINIT_MSG(FWVERSION, "\tFirmware Version: %d.%d\n"), - SlotInfo.firmwareVersion.major, - SlotInfo.firmwareVersion.minor); } return CKR_OK; } @@ -1003,83 +1023,102 @@ list_slot(void){ return CKR_OK; } -CK_RV -display_token_info(void){ - CK_RV rc; // Return Code - CK_TOKEN_INFO TokenInfo; // Variable to hold Token Information - unsigned int lcv; // Loop control variable - - for (lcv = 0; lcv < SlotCount; lcv++){ - /* Get the Token info for each slot in the system */ - rc = FunctionPtr->C_GetTokenInfo(SlotList[lcv], &TokenInfo); - if (rc != CKR_OK) { - printf(PKCSINIT_MSG(TOKERROR, "Error getting token info: 0x%X (%s)\n"), rc, p11_get_ckr(rc)); - return rc; - } - +void +print_token_info(int slot_id, CK_TOKEN_INFO *TokenInfo) +{ /* Display the token information */ - printf(PKCSINIT_MSG(TOKINFO, "Token #%d Info:\n"), SlotList[lcv]); - printf(PKCSINIT_MSG(TOKLABEL, "\tLabel: %.32s\n"), TokenInfo.label); - printf(PKCSINIT_MSG(MANUFACT, "\tManufacturer: %.32s\n"), TokenInfo.manufacturerID); - printf(PKCSINIT_MSG(MODEL, "\tModel: %.16s\n"), TokenInfo.model); - printf(PKCSINIT_MSG(SERIAL, "\tSerial Number: %.16s\n"), TokenInfo.serialNumber); - printf(PKCSINIT_MSG(FLAGS, "\tFlags: 0x%X ("), TokenInfo.flags); + printf(PKCSINIT_MSG(TOKINFO, "Token #%d Info:\n"), slot_id); + printf(PKCSINIT_MSG(TOKLABEL, "\tLabel: %.32s\n"), TokenInfo->label); + printf(PKCSINIT_MSG(MANUFACT, "\tManufacturer: %.32s\n"), TokenInfo->manufacturerID); + printf(PKCSINIT_MSG(MODEL, "\tModel: %.16s\n"), TokenInfo->model); + printf(PKCSINIT_MSG(SERIAL, "\tSerial Number: %.16s\n"), TokenInfo->serialNumber); + printf(PKCSINIT_MSG(FLAGS, "\tFlags: 0x%X ("), TokenInfo->flags); /* print more informative flag message */ - if (TokenInfo.flags & CKF_RNG) + if (TokenInfo->flags & CKF_RNG) printf(PKCSINIT_MSG(FLAGS, "RNG|")); - if (TokenInfo.flags & CKF_WRITE_PROTECTED) + if (TokenInfo->flags & CKF_WRITE_PROTECTED) printf(PKCSINIT_MSG(FLAGS, "WRITE_PROTECTED|")); - if (TokenInfo.flags & CKF_LOGIN_REQUIRED) + if (TokenInfo->flags & CKF_LOGIN_REQUIRED) printf(PKCSINIT_MSG(FLAGS, "LOGIN_REQUIRED|")); - if (TokenInfo.flags & CKF_USER_PIN_INITIALIZED) + if (TokenInfo->flags & CKF_USER_PIN_INITIALIZED) printf(PKCSINIT_MSG(FLAGS, "USER_PIN_INITIALIZED|")); - if (TokenInfo.flags & CKF_RESTORE_KEY_NOT_NEEDED) + if (TokenInfo->flags & CKF_RESTORE_KEY_NOT_NEEDED) printf(PKCSINIT_MSG(FLAGS, "RESTORE_KEY_NOT_NEEDED|")); - if (TokenInfo.flags & CKF_CLOCK_ON_TOKEN) + if (TokenInfo->flags & CKF_CLOCK_ON_TOKEN) printf(PKCSINIT_MSG(FLAGS, "CLOCK_ON_TOKEN|")); - if (TokenInfo.flags & CKF_PROTECTED_AUTHENTICATION_PATH) + if (TokenInfo->flags & CKF_PROTECTED_AUTHENTICATION_PATH) printf(PKCSINIT_MSG(FLAGS, "PROTECTED_AUTHENTICATION_PATH|")); - if (TokenInfo.flags & CKF_DUAL_CRYPTO_OPERATIONS) + if (TokenInfo->flags & CKF_DUAL_CRYPTO_OPERATIONS) printf(PKCSINIT_MSG(FLAGS, "DUAL_CRYPTO_OPERATIONS|")); - if (TokenInfo.flags & CKF_TOKEN_INITIALIZED) + if (TokenInfo->flags & CKF_TOKEN_INITIALIZED) printf(PKCSINIT_MSG(FLAGS, "TOKEN_INITIALIZED|")); - if (TokenInfo.flags & CKF_SECONDARY_AUTHENTICATION) + if (TokenInfo->flags & CKF_SECONDARY_AUTHENTICATION) printf(PKCSINIT_MSG(FLAGS, "SECONDARY_AUTHENTICATION|")); - if (TokenInfo.flags & CKF_USER_PIN_COUNT_LOW) + if (TokenInfo->flags & CKF_USER_PIN_COUNT_LOW) printf(PKCSINIT_MSG(FLAGS, "USER_PIN_COUNT_LOW|")); - if (TokenInfo.flags & CKF_USER_PIN_FINAL_TRY) + if (TokenInfo->flags & CKF_USER_PIN_FINAL_TRY) printf(PKCSINIT_MSG(FLAGS, "USER_PIN_FINAL_TRY|")); - if (TokenInfo.flags & CKF_USER_PIN_LOCKED) + if (TokenInfo->flags & CKF_USER_PIN_LOCKED) printf(PKCSINIT_MSG(FLAGS, "USER_PIN_LOCKED|")); - if (TokenInfo.flags & CKF_USER_PIN_TO_BE_CHANGED) + if (TokenInfo->flags & CKF_USER_PIN_TO_BE_CHANGED) printf(PKCSINIT_MSG(FLAGS, "USER_PIN_TO_BE_CHANGED|")); - if (TokenInfo.flags & CKF_SO_PIN_COUNT_LOW) + if (TokenInfo->flags & CKF_SO_PIN_COUNT_LOW) printf(PKCSINIT_MSG(FLAGS, "SO_PIN_COUNT_LOW|")); - if (TokenInfo.flags & CKF_SO_PIN_FINAL_TRY) + if (TokenInfo->flags & CKF_SO_PIN_FINAL_TRY) printf(PKCSINIT_MSG(FLAGS, "SO_PIN_FINAL_TRY|")); - if (TokenInfo.flags & CKF_SO_PIN_LOCKED) + if (TokenInfo->flags & CKF_SO_PIN_LOCKED) printf(PKCSINIT_MSG(FLAGS, "SO_PIN_LOCKED|")); - if (TokenInfo.flags & CKF_SO_PIN_TO_BE_CHANGED) + if (TokenInfo->flags & CKF_SO_PIN_TO_BE_CHANGED) printf(PKCSINIT_MSG(FLAGS, "SO_PIN_TO_BE_CHANGED|")); printf(")\n"); - printf(PKCSINIT_MSG(SESSIONS, "\tSessions: %d/%d\n"), TokenInfo.ulSessionCount, - TokenInfo.ulMaxSessionCount); + printf(PKCSINIT_MSG(SESSIONS, "\tSessions: %d/%d\n"), TokenInfo->ulSessionCount, + TokenInfo->ulMaxSessionCount); printf(PKCSINIT_MSG(RWSESSIONS, "\tR/W Sessions: %d/%d\n"), - TokenInfo.ulRwSessionCount, TokenInfo.ulMaxRwSessionCount); - printf(PKCSINIT_MSG(PINLEN, "\tPIN Length: %d-%d\n"), TokenInfo.ulMinPinLen, - TokenInfo.ulMaxPinLen); + TokenInfo->ulRwSessionCount, TokenInfo->ulMaxRwSessionCount); + printf(PKCSINIT_MSG(PINLEN, "\tPIN Length: %d-%d\n"), TokenInfo->ulMinPinLen, + TokenInfo->ulMaxPinLen); printf(PKCSINIT_MSG(PUBMEM, "\tPublic Memory: 0x%X/0x%X\n"), - TokenInfo.ulFreePublicMemory, TokenInfo.ulTotalPublicMemory); + TokenInfo->ulFreePublicMemory, TokenInfo->ulTotalPublicMemory); printf(PKCSINIT_MSG(PRIVMEM, "\tPrivate Memory: 0x%X/0x%X\n"), - TokenInfo.ulFreePrivateMemory, TokenInfo.ulTotalPrivateMemory); - printf(PKCSINIT_MSG(HWVERSION, "\tHardware Version: %d.%d\n"), TokenInfo.hardwareVersion.major, - TokenInfo.hardwareVersion.minor); + TokenInfo->ulFreePrivateMemory, TokenInfo->ulTotalPrivateMemory); + printf(PKCSINIT_MSG(HWVERSION, "\tHardware Version: %d.%d\n"), TokenInfo->hardwareVersion.major, + TokenInfo->hardwareVersion.minor); printf(PKCSINIT_MSG(FWVERSION, "\tFirmware Version: %d.%d\n"), - TokenInfo.firmwareVersion.major, - TokenInfo.firmwareVersion.minor); - printf(PKCSINIT_MSG(TIME, "\tTime: %.16s\n"), TokenInfo.utcTime); + TokenInfo->firmwareVersion.major, + TokenInfo->firmwareVersion.minor); + printf(PKCSINIT_MSG(TIME, "\tTime: %.16s\n"), TokenInfo->utcTime); +} + +CK_RV +display_token_info(int slot_id) +{ + CK_RV rc; // Return Code + CK_TOKEN_INFO TokenInfo; // Variable to hold Token Information + unsigned int lcv; // Loop control variable + + if (slot_id != -1) { + rc = FunctionPtr->C_GetTokenInfo(slot_id, &TokenInfo); + if (rc != CKR_OK) { + printf(PKCSINIT_MSG(TOKERROR, "Error getting token info: 0x%X (%s)\n"), rc, + p11_get_ckr(rc)); + return rc; + } + + print_token_info(slot_id, &TokenInfo); + return CKR_OK; + } + + for (lcv = 0; lcv < SlotCount; lcv++){ + /* Get the Token info for each slot in the system */ + rc = FunctionPtr->C_GetTokenInfo(SlotList[lcv], &TokenInfo); + if (rc != CKR_OK) { + printf(PKCSINIT_MSG(TOKERROR, "Error getting token info: 0x%X (%s)\n"), rc, p11_get_ckr(rc)); + return rc; + } + + print_token_info(SlotList[lcv], &TokenInfo); } return CKR_OK; } ------------------------------------------------------------------------------ Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d _______________________________________________ Opencryptoki-tech mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opencryptoki-tech
