summaryrefslogtreecommitdiff
path: root/usr/src/lib
diff options
context:
space:
mode:
authorPeter Shoults <Peter.Shoults@Sun.COM>2010-05-28 20:36:19 -0400
committerPeter Shoults <Peter.Shoults@Sun.COM>2010-05-28 20:36:19 -0400
commit1fa2a72a9db6af03d660af1862e29a6f779f35d8 (patch)
tree9604ddc78696ffc91d8f607dce4242fd20e9f222 /usr/src/lib
parentf044df33d9fe9e8e3ed7344a8b548b17f20709f2 (diff)
downloadillumos-joyent-1fa2a72a9db6af03d660af1862e29a6f779f35d8.tar.gz
6949306 soft_slot.authenticated not getting properly set anymore, confusing C_Logout & friends
6953950 $s and %s look similar, but $s breaks keystore creation
Diffstat (limited to 'usr/src/lib')
-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);