summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/lib/pkcs11/pkcs11_softtoken/common/softKeystoreUtil.c2
-rw-r--r--usr/src/lib/pkcs11/pkcs11_softtoken/common/softSlotToken.c16
2 files changed, 16 insertions, 2 deletions
diff --git a/usr/src/lib/pkcs11/pkcs11_softtoken/common/softKeystoreUtil.c b/usr/src/lib/pkcs11/pkcs11_softtoken/common/softKeystoreUtil.c
index da498eff8e..0ebfa871e9 100644
--- a/usr/src/lib/pkcs11/pkcs11_softtoken/common/softKeystoreUtil.c
+++ b/usr/src/lib/pkcs11/pkcs11_softtoken/common/softKeystoreUtil.c
@@ -343,7 +343,7 @@ create_keystore()
}
/* create $HOME/.sunw/pkcs11_softtoken */
(void) snprintf(keystore, sizeof (keystore),
- "%s/%s/$s", home, SUNW_PATH, KEYSTORE_PATH);
+ "%s/%s/%s", home, SUNW_PATH, KEYSTORE_PATH);
if (mkdirp(keystore,
S_IRUSR|S_IWUSR|S_IXUSR) < 0) {
return (-1);
diff --git a/usr/src/lib/pkcs11/pkcs11_softtoken/common/softSlotToken.c b/usr/src/lib/pkcs11/pkcs11_softtoken/common/softSlotToken.c
index 3665fcf754..85249f6d45 100644
--- a/usr/src/lib/pkcs11/pkcs11_softtoken/common/softSlotToken.c
+++ b/usr/src/lib/pkcs11/pkcs11_softtoken/common/softSlotToken.c
@@ -301,10 +301,12 @@ C_GetSlotInfo(CK_SLOT_ID slotID, CK_SLOT_INFO_PTR pInfo)
return (CKR_OK);
}
-
CK_RV
C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
{
+ boolean_t pin_initialized = B_FALSE;
+ char *ks_cryptpin = NULL;
+
if (!softtoken_initialized)
return (CKR_CRYPTOKI_NOT_INITIALIZED);
@@ -315,10 +317,22 @@ C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
if (pInfo == NULL)
return (CKR_ARGUMENTS_BAD);
+ /*
+ * It is intentional that we don't forward the error code
+ * returned from soft_keystore_pin_initialized() to the caller
+ */
pInfo->flags = SOFT_TOKEN_FLAGS;
if (soft_slot.keystore_load_status == KEYSTORE_UNAVAILABLE) {
pInfo->flags |= CKF_WRITE_PROTECTED;
+ } else {
+ if ((soft_keystore_pin_initialized(&pin_initialized,
+ &ks_cryptpin, B_FALSE) == CKR_OK) && !pin_initialized)
+ pInfo->flags |= CKF_USER_PIN_TO_BE_CHANGED;
}
+
+ if (ks_cryptpin)
+ free(ks_cryptpin);
+
/* 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);