diff options
Diffstat (limited to 'usr/src/lib/pkcs11/pkcs11_softtoken/common/softSlotToken.c')
| -rw-r--r-- | usr/src/lib/pkcs11/pkcs11_softtoken/common/softSlotToken.c | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/usr/src/lib/pkcs11/pkcs11_softtoken/common/softSlotToken.c b/usr/src/lib/pkcs11/pkcs11_softtoken/common/softSlotToken.c index d7f5f27fc3..3665fcf754 100644 --- a/usr/src/lib/pkcs11/pkcs11_softtoken/common/softSlotToken.c +++ b/usr/src/lib/pkcs11/pkcs11_softtoken/common/softSlotToken.c @@ -19,8 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. */ #include <strings.h> @@ -306,12 +305,6 @@ C_GetSlotInfo(CK_SLOT_ID slotID, CK_SLOT_INFO_PTR pInfo) CK_RV C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo) { - - ulong_t token_flag = 0; - boolean_t pin_initialized = B_FALSE; - char *ks_cryptpin = NULL; - CK_RV rv = CKR_OK; - if (!softtoken_initialized) return (CKR_CRYPTOKI_NOT_INITIALIZED); @@ -322,25 +315,16 @@ C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo) if (pInfo == NULL) return (CKR_ARGUMENTS_BAD); - if (!soft_keystore_status(KEYSTORE_VERSION_OK)) - return (CKR_DEVICE_REMOVED); - + pInfo->flags = SOFT_TOKEN_FLAGS; + if (soft_slot.keystore_load_status == KEYSTORE_UNAVAILABLE) { + pInfo->flags |= CKF_WRITE_PROTECTED; + } /* Provide information about a token in the provided buffer */ (void) strncpy((char *)pInfo->label, SOFT_TOKEN_LABEL, 32); (void) strncpy((char *)pInfo->manufacturerID, SOFT_MANUFACTURER_ID, 32); (void) strncpy((char *)pInfo->model, TOKEN_MODEL, 16); (void) strncpy((char *)pInfo->serialNumber, SOFT_TOKEN_SERIAL, 16); - rv = soft_keystore_pin_initialized(&pin_initialized, &ks_cryptpin, - B_FALSE); - if (rv != CKR_OK) - return (rv); - if (!pin_initialized) - token_flag = CKF_USER_PIN_TO_BE_CHANGED; - if (ks_cryptpin) - free(ks_cryptpin); - - pInfo->flags = SOFT_TOKEN_FLAGS | token_flag; pInfo->ulMaxSessionCount = CK_EFFECTIVELY_INFINITE; pInfo->ulSessionCount = soft_session_cnt; pInfo->ulMaxRwSessionCount = CK_EFFECTIVELY_INFINITE; @@ -463,7 +447,10 @@ C_InitToken(CK_SLOT_ID slotID, CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen, if (!softtoken_initialized) return (CKR_CRYPTOKI_NOT_INITIALIZED); - return (CKR_FUNCTION_NOT_SUPPORTED); + if (create_keystore() != 0) + return (CKR_FUNCTION_FAILED); + + return (CKR_OK); } /*ARGSUSED*/ @@ -497,7 +484,7 @@ C_SetPIN(CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pOldPin, if (rv != CKR_OK) return (rv); - if (!soft_keystore_status(KEYSTORE_VERSION_OK)) { + if (!soft_keystore_status(KEYSTORE_LOAD)) { SES_REFRELE(session_p, lock_held); return (CKR_DEVICE_REMOVED); } |
