From b43ea19320cf69dfcfaaa921b1d8d4140975b4e1 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Mon, 30 Nov 2015 02:45:11 +0100 Subject: [PATCH] reset login_user on CKR_USER_NOT_LOGGED_IN --- src/pkcs11/pkcs11-object.c | 14 ++++++++++++++ src/pkcs11/pkcs11-session.c | 24 ++++++++++++++++-------- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/pkcs11/pkcs11-object.c b/src/pkcs11/pkcs11-object.c index 72bee2d7..6baa1709 100644 --- a/src/pkcs11/pkcs11-object.c +++ b/src/pkcs11/pkcs11-object.c @@ -695,6 +695,8 @@ C_Sign(CK_SESSION_HANDLE hSession, /* the session's handle */ } else { reset_login_state(session->slot); } + if (rv == CKR_USER_NOT_LOGGED_IN) + session->slot->login_user = -1; } out: @@ -763,6 +765,8 @@ C_SignFinal(CK_SESSION_HANDLE hSession, /* the session's handle */ } else { reset_login_state(session->slot); } + if (rv == CKR_USER_NOT_LOGGED_IN) + session->slot->login_user = -1; } out: @@ -906,6 +910,8 @@ CK_RV C_Decrypt(CK_SESSION_HANDLE hSession, /* the session's handle */ } else { reset_login_state(session->slot); } + if (rv == CKR_USER_NOT_LOGGED_IN) + session->slot->login_user = -1; } sc_log(context, "C_Decrypt() = %s", lookup_enum ( RV_T, rv )); @@ -1023,6 +1029,8 @@ CK_RV C_GenerateKeyPair(CK_SESSION_HANDLE hSession, /* the session's handle */ } else { reset_login_state(session->slot); } + if (rv == CKR_USER_NOT_LOGGED_IN) + session->slot->login_user = -1; } out: @@ -1128,6 +1136,8 @@ CK_RV C_DeriveKey(CK_SESSION_HANDLE hSession, /* the session's handle */ } else { reset_login_state(session->slot); } + if (rv == CKR_USER_NOT_LOGGED_IN) + session->slot->login_user = -1; break; default: @@ -1253,6 +1263,8 @@ CK_RV C_Verify(CK_SESSION_HANDLE hSession, /* the session's handle */ } else { reset_login_state(session->slot); } + if (rv == CKR_USER_NOT_LOGGED_IN) + session->slot->login_user = -1; } out: @@ -1310,6 +1322,8 @@ CK_RV C_VerifyFinal(CK_SESSION_HANDLE hSession, /* the session's handle */ } else { reset_login_state(session->slot); } + if (rv == CKR_USER_NOT_LOGGED_IN) + session->slot->login_user = -1; } sc_log(context, "C_VerifyFinal() = %s", lookup_enum ( RV_T, rv )); diff --git a/src/pkcs11/pkcs11-session.c b/src/pkcs11/pkcs11-session.c index 1ab9318f..f8f289a5 100644 --- a/src/pkcs11/pkcs11-session.c +++ b/src/pkcs11/pkcs11-session.c @@ -279,10 +279,12 @@ CK_RV C_Login(CK_SESSION_HANDLE hSession, /* the session's handle */ if (rv == CKR_OK) rv = slot->p11card->framework->login(slot, userType, pPin, ulPinLen); if (rv == CKR_OK) { - rv = reset_login_state(session->slot); + rv = reset_login_state(slot); } else { - reset_login_state(session->slot); + reset_login_state(slot); } + if (rv == CKR_USER_NOT_LOGGED_IN) + slot->login_user = -1; } } else { @@ -305,10 +307,12 @@ 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(session->slot); + rv = reset_login_state(slot); } else { - reset_login_state(session->slot); + reset_login_state(slot); } + if (rv == CKR_USER_NOT_LOGGED_IN) + slot->login_user = -1; } out: @@ -387,10 +391,12 @@ CK_RV C_InitPIN(CK_SESSION_HANDLE hSession, CK_CHAR_PTR pPin, CK_ULONG ulPinLen) sc_log(context, "C_InitPIN() init-pin result %li", rv); } if (rv == CKR_OK) { - rv = reset_login_state(session->slot); + rv = reset_login_state(slot); } else { - reset_login_state(session->slot); + reset_login_state(slot); } + if (rv == CKR_USER_NOT_LOGGED_IN) + slot->login_user = -1; } out: @@ -430,10 +436,12 @@ CK_RV C_SetPIN(CK_SESSION_HANDLE hSession, if (rv == CKR_OK) rv = slot->p11card->framework->change_pin(slot, pOldPin, ulOldLen, pNewPin, ulNewLen); if (rv == CKR_OK) { - rv = reset_login_state(session->slot); + rv = reset_login_state(slot); } else { - reset_login_state(session->slot); + reset_login_state(slot); } + if (rv == CKR_USER_NOT_LOGGED_IN) + slot->login_user = -1; out: sc_pkcs11_unlock();