reset `login_user` with `reset_login_state`
This commit is contained in:
parent
b43ea19320
commit
3384113616
|
@ -154,14 +154,21 @@ CK_RV restore_login_state(struct sc_pkcs11_slot *slot)
|
|||
return r;
|
||||
}
|
||||
|
||||
CK_RV reset_login_state(struct sc_pkcs11_slot *slot)
|
||||
CK_RV reset_login_state(struct sc_pkcs11_slot *slot, CK_RV rv)
|
||||
{
|
||||
if (slot) {
|
||||
if (sc_pkcs11_conf.atomic
|
||||
&& slot && slot->p11card && slot->p11card->framework) {
|
||||
&& slot->p11card && slot->p11card->framework) {
|
||||
slot->p11card->framework->logout(slot);
|
||||
}
|
||||
|
||||
return CKR_OK;
|
||||
if (rv == CKR_USER_NOT_LOGGED_IN) {
|
||||
slot->login_user = -1;
|
||||
pop_all_login_states(slot);
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
CK_RV push_login_state(struct sc_pkcs11_slot *slot,
|
||||
|
|
|
@ -690,13 +690,7 @@ C_Sign(CK_SESSION_HANDLE hSession, /* the session's handle */
|
|||
rv = restore_login_state(session->slot);
|
||||
if (rv == CKR_OK)
|
||||
rv = sc_pkcs11_sign_final(session, pSignature, pulSignatureLen);
|
||||
if (rv == CKR_OK) {
|
||||
rv = reset_login_state(session->slot);
|
||||
} else {
|
||||
reset_login_state(session->slot);
|
||||
}
|
||||
if (rv == CKR_USER_NOT_LOGGED_IN)
|
||||
session->slot->login_user = -1;
|
||||
rv = reset_login_state(session->slot, rv);
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -760,13 +754,7 @@ C_SignFinal(CK_SESSION_HANDLE hSession, /* the session's handle */
|
|||
rv = restore_login_state(session->slot);
|
||||
if (rv == CKR_OK)
|
||||
rv = sc_pkcs11_sign_final(session, pSignature, pulSignatureLen);
|
||||
if (rv == CKR_OK) {
|
||||
rv = reset_login_state(session->slot);
|
||||
} else {
|
||||
reset_login_state(session->slot);
|
||||
}
|
||||
if (rv == CKR_USER_NOT_LOGGED_IN)
|
||||
session->slot->login_user = -1;
|
||||
rv = reset_login_state(session->slot, rv);
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -905,13 +893,7 @@ CK_RV C_Decrypt(CK_SESSION_HANDLE hSession, /* the session's handle */
|
|||
rv = sc_pkcs11_decr(session, pEncryptedData,
|
||||
ulEncryptedDataLen, pData, pulDataLen);
|
||||
}
|
||||
if (rv == CKR_OK) {
|
||||
rv = reset_login_state(session->slot);
|
||||
} else {
|
||||
reset_login_state(session->slot);
|
||||
}
|
||||
if (rv == CKR_USER_NOT_LOGGED_IN)
|
||||
session->slot->login_user = -1;
|
||||
rv = reset_login_state(session->slot, rv);
|
||||
}
|
||||
|
||||
sc_log(context, "C_Decrypt() = %s", lookup_enum ( RV_T, rv ));
|
||||
|
@ -1024,13 +1006,7 @@ CK_RV C_GenerateKeyPair(CK_SESSION_HANDLE hSession, /* the session's handle */
|
|||
pPublicKeyTemplate, ulPublicKeyAttributeCount,
|
||||
pPrivateKeyTemplate, ulPrivateKeyAttributeCount,
|
||||
phPublicKey, phPrivateKey);
|
||||
if (rv == CKR_OK) {
|
||||
rv = reset_login_state(session->slot);
|
||||
} else {
|
||||
reset_login_state(session->slot);
|
||||
}
|
||||
if (rv == CKR_USER_NOT_LOGGED_IN)
|
||||
session->slot->login_user = -1;
|
||||
rv = reset_login_state(session->slot, rv);
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -1131,13 +1107,7 @@ CK_RV C_DeriveKey(CK_SESSION_HANDLE hSession, /* the session's handle */
|
|||
rv = sc_pkcs11_deri(session, pMechanism, object, key_type,
|
||||
hSession, *phKey, key_object);
|
||||
/* TODO if (rv != CK_OK) need to destroy the object */
|
||||
if (rv == CKR_OK) {
|
||||
rv = reset_login_state(session->slot);
|
||||
} else {
|
||||
reset_login_state(session->slot);
|
||||
}
|
||||
if (rv == CKR_USER_NOT_LOGGED_IN)
|
||||
session->slot->login_user = -1;
|
||||
rv = reset_login_state(session->slot, rv);
|
||||
|
||||
break;
|
||||
default:
|
||||
|
@ -1258,13 +1228,7 @@ CK_RV C_Verify(CK_SESSION_HANDLE hSession, /* the session's handle */
|
|||
rv = restore_login_state(session->slot);
|
||||
if (rv == CKR_OK)
|
||||
rv = sc_pkcs11_verif_final(session, pSignature, ulSignatureLen);
|
||||
if (rv == CKR_OK) {
|
||||
rv = reset_login_state(session->slot);
|
||||
} else {
|
||||
reset_login_state(session->slot);
|
||||
}
|
||||
if (rv == CKR_USER_NOT_LOGGED_IN)
|
||||
session->slot->login_user = -1;
|
||||
rv = reset_login_state(session->slot, rv);
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -1317,13 +1281,7 @@ CK_RV C_VerifyFinal(CK_SESSION_HANDLE hSession, /* the session's handle */
|
|||
rv = restore_login_state(session->slot);
|
||||
if (rv == CKR_OK)
|
||||
rv = sc_pkcs11_verif_final(session, pSignature, ulSignatureLen);
|
||||
if (rv == CKR_OK) {
|
||||
rv = reset_login_state(session->slot);
|
||||
} else {
|
||||
reset_login_state(session->slot);
|
||||
}
|
||||
if (rv == CKR_USER_NOT_LOGGED_IN)
|
||||
session->slot->login_user = -1;
|
||||
rv = reset_login_state(session->slot, rv);
|
||||
}
|
||||
|
||||
sc_log(context, "C_VerifyFinal() = %s", lookup_enum ( RV_T, rv ));
|
||||
|
|
|
@ -278,13 +278,7 @@ CK_RV C_Login(CK_SESSION_HANDLE hSession, /* the session's handle */
|
|||
rv = restore_login_state(slot);
|
||||
if (rv == CKR_OK)
|
||||
rv = slot->p11card->framework->login(slot, userType, pPin, ulPinLen);
|
||||
if (rv == CKR_OK) {
|
||||
rv = reset_login_state(slot);
|
||||
} else {
|
||||
reset_login_state(slot);
|
||||
}
|
||||
if (rv == CKR_USER_NOT_LOGGED_IN)
|
||||
slot->login_user = -1;
|
||||
rv = reset_login_state(slot, rv);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -307,12 +301,8 @@ CK_RV C_Login(CK_SESSION_HANDLE hSession, /* the session's handle */
|
|||
rv = push_login_state(slot, userType, pPin, ulPinLen);
|
||||
if (rv == CKR_OK) {
|
||||
slot->login_user = userType;
|
||||
rv = reset_login_state(slot);
|
||||
} else {
|
||||
reset_login_state(slot);
|
||||
}
|
||||
if (rv == CKR_USER_NOT_LOGGED_IN)
|
||||
slot->login_user = -1;
|
||||
rv = reset_login_state(slot, rv);
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -390,13 +380,7 @@ CK_RV C_InitPIN(CK_SESSION_HANDLE hSession, CK_CHAR_PTR pPin, CK_ULONG ulPinLen)
|
|||
rv = slot->p11card->framework->init_pin(slot, pPin, ulPinLen);
|
||||
sc_log(context, "C_InitPIN() init-pin result %li", rv);
|
||||
}
|
||||
if (rv == CKR_OK) {
|
||||
rv = reset_login_state(slot);
|
||||
} else {
|
||||
reset_login_state(slot);
|
||||
}
|
||||
if (rv == CKR_USER_NOT_LOGGED_IN)
|
||||
slot->login_user = -1;
|
||||
rv = reset_login_state(slot, rv);
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -435,13 +419,7 @@ CK_RV C_SetPIN(CK_SESSION_HANDLE hSession,
|
|||
rv = restore_login_state(slot);
|
||||
if (rv == CKR_OK)
|
||||
rv = slot->p11card->framework->change_pin(slot, pOldPin, ulOldLen, pNewPin, ulNewLen);
|
||||
if (rv == CKR_OK) {
|
||||
rv = reset_login_state(slot);
|
||||
} else {
|
||||
reset_login_state(slot);
|
||||
}
|
||||
if (rv == CKR_USER_NOT_LOGGED_IN)
|
||||
slot->login_user = -1;
|
||||
rv = reset_login_state(slot, rv);
|
||||
|
||||
out:
|
||||
sc_pkcs11_unlock();
|
||||
|
|
|
@ -352,7 +352,7 @@ CK_RV slot_find_changed(CK_SLOT_ID_PTR idp, int mask);
|
|||
|
||||
/* Login tracking functions */
|
||||
CK_RV restore_login_state(struct sc_pkcs11_slot *slot);
|
||||
CK_RV reset_login_state(struct sc_pkcs11_slot *slot);
|
||||
CK_RV reset_login_state(struct sc_pkcs11_slot *slot, CK_RV rv);
|
||||
CK_RV push_login_state(struct sc_pkcs11_slot *slot,
|
||||
CK_USER_TYPE userType, CK_CHAR_PTR pPin, CK_ULONG ulPinLen);
|
||||
void pop_login_state(struct sc_pkcs11_slot *slot);
|
||||
|
|
Loading…
Reference in New Issue