@@ -1713,8 +1713,8 @@ CK_RV C_SetOperationState(CK_SESSION_HANDLE hSession,
17131713CK_RV C_Login (CK_SESSION_HANDLE hSession , CK_USER_TYPE userType ,
17141714 CK_UTF8CHAR_PTR pPin , CK_ULONG ulPinLen )
17151715{
1716- int ret ;
1717- CK_RV rv ;
1716+ int ret = 0 ;
1717+ CK_RV rv = CKR_OK ;
17181718 WP11_Slot * slot ;
17191719 WP11_Session * session ;
17201720
@@ -1751,44 +1751,9 @@ CK_RV C_Login(CK_SESSION_HANDLE hSession, CK_USER_TYPE userType,
17511751 slot = WP11_Session_GetSlot (session );
17521752 if (userType == CKU_SO ) {
17531753 ret = WP11_Slot_SOLogin (slot , (char * )pPin , (int )ulPinLen );
1754- if (ret == LOGGED_IN_E ) {
1755- rv = CKR_USER_ALREADY_LOGGED_IN ;
1756- WOLFPKCS11_LEAVE ("C_Login" , rv );
1757- return rv ;
1758- }
1759- if (ret == READ_ONLY_E ) {
1760- rv = CKR_SESSION_READ_ONLY_EXISTS ;
1761- WOLFPKCS11_LEAVE ("C_Login" , rv );
1762- return rv ;
1763- }
1764- if (ret == PIN_NOT_SET_E ) {
1765- rv = CKR_USER_PIN_NOT_INITIALIZED ;
1766- WOLFPKCS11_LEAVE ("C_Login" , rv );
1767- return rv ;
1768- }
1769- if (ret != 0 ) {
1770- rv = CKR_PIN_INCORRECT ;
1771- WOLFPKCS11_LEAVE ("C_Login" , rv );
1772- return rv ;
1773- }
17741754 }
17751755 else if (userType == CKU_USER ) {
17761756 ret = WP11_Slot_UserLogin (slot , (char * )pPin , (int )ulPinLen );
1777- if (ret == LOGGED_IN_E ) {
1778- rv = CKR_USER_ALREADY_LOGGED_IN ;
1779- WOLFPKCS11_LEAVE ("C_Login" , rv );
1780- return rv ;
1781- }
1782- if (ret == PIN_NOT_SET_E ) {
1783- rv = CKR_USER_PIN_NOT_INITIALIZED ;
1784- WOLFPKCS11_LEAVE ("C_Login" , rv );
1785- return rv ;
1786- }
1787- if (ret != 0 ) {
1788- rv = CKR_PIN_INCORRECT ;
1789- WOLFPKCS11_LEAVE ("C_Login" , rv );
1790- return rv ;
1791- }
17921757 }
17931758 else if (userType == CKU_CONTEXT_SPECIFIC ) {
17941759 rv = CKR_OPERATION_NOT_INITIALIZED ;
@@ -1801,7 +1766,37 @@ CK_RV C_Login(CK_SESSION_HANDLE hSession, CK_USER_TYPE userType,
18011766 return rv ;
18021767 }
18031768
1804- rv = CKR_OK ;
1769+ switch (ret ) {
1770+ case LOGGED_IN_E :
1771+ rv = CKR_USER_ALREADY_LOGGED_IN ;
1772+ break ;
1773+ case PIN_NOT_SET_E :
1774+ rv = CKR_USER_PIN_NOT_INITIALIZED ;
1775+ break ;
1776+ case PIN_INVALID_E :
1777+ rv = CKR_PIN_INCORRECT ;
1778+ break ;
1779+ case READ_ONLY_E :
1780+ /* Only possible for SO login */
1781+ rv = CKR_SESSION_READ_ONLY_EXISTS ;
1782+ break ;
1783+ case 0 :
1784+ rv = CKR_OK ;
1785+ break ;
1786+ #ifdef WOLFPKCS11_TPM
1787+ case TPM_RC_MEMORY :
1788+ case TPM_RC_SESSION_MEMORY :
1789+ case TPM_RC_OBJECT_MEMORY :
1790+ rv = CKR_DEVICE_MEMORY ;
1791+ break ;
1792+ #endif
1793+ default :
1794+ rv = CKR_DEVICE_ERROR ;
1795+ break ;
1796+ }
1797+
1798+ WOLFPKCS11_MSG ("Login function ret: %d" , ret );
1799+
18051800 WOLFPKCS11_LEAVE ("C_Login" , rv );
18061801 return rv ;
18071802}
0 commit comments