Workaround solution for locktype=None
authorDong Sun Lee <ds73.lee@samsung.com>
Tue, 12 Aug 2014 06:08:25 +0000 (15:08 +0900)
committerBartlomiej Grzelewski <b.grzelewski@samsung.com>
Fri, 12 Sep 2014 12:59:27 +0000 (14:59 +0200)
Change-Id: Id57bd642a1df3d9b8f0e2bd7923974c2c6a92382
Signed-off-by: Dong Sun Lee <ds73.lee@samsung.com>
src/manager/client-capi/ckmc-control.cpp
src/manager/service/ckm-logic.cpp
src/manager/service/ckm-service.cpp

index 7efbdff..f990a30 100644 (file)
 #include <ckmc-type-converter.h>
 #include <ckm/ckm-type.h>
 
+CKM::Password _toPasswordStr(const char *str)
+{
+       if(str == NULL)
+               return CKM::Password();
+       return CKM::Password(str);
+}
+
 KEY_MANAGER_CAPI
 int ckmc_unlock_user_key(uid_t user, const char *password)
 {
        auto control = CKM::Control::create();
-       int ret = control->unlockUserKey(user, CKM::Password(password));
+       int ret = control->unlockUserKey(user, _toPasswordStr(password));
        return to_ckmc_error(ret);
 }
 
@@ -54,7 +61,7 @@ KEY_MANAGER_CAPI
 int ckmc_change_user_password(uid_t user, const char *oldPassword, const char *newPassword)
 {
        auto control = CKM::Control::create();
-       int ret =  control->changeUserPassword(user, CKM::Password(oldPassword), CKM::Password(newPassword));
+       int ret =  control->changeUserPassword(user, _toPasswordStr(oldPassword), _toPasswordStr(newPassword));
        return to_ckmc_error(ret);
 }
 
@@ -62,7 +69,7 @@ KEY_MANAGER_CAPI
 int ckmc_reset_user_password(uid_t user, const char *newPassword)
 {
        auto control = CKM::Control::create();
-       int ret =  control->resetUserPassword(user, CKM::Password(newPassword));
+       int ret =  control->resetUserPassword(user, _toPasswordStr(newPassword));
        return to_ckmc_error(ret);
 }
 
index b70357a..51bb6f4 100755 (executable)
@@ -86,6 +86,12 @@ RawBuffer CKMLogic::unlockUserKey(uid_t user, const Password &password) {
         retCode = CKM_API_ERROR_SERVER_ERROR;
     }
 
+    if(retCode != CKM_API_SUCCESS) {
+        // When not successful, UserData in m_userDataMap should be erased.
+        // Because other operations make decision based on the existence of UserData in m_userDataMap.
+        m_userDataMap.erase(user);
+    }
+
     MessageBuffer response;
     Serialization::Serialize(response, retCode);
     return response.Pop();
index 906929c..764d3e9 100644 (file)
@@ -156,6 +156,14 @@ RawBuffer CKMService::processStorage(Credentials &cred, MessageBuffer &buffer){
     Deserialization::Deserialize(buffer, command);
     Deserialization::Deserialize(buffer, commandId);
 
+    // This is a workaround solution for locktype=None in Tizen 2.2.1
+    // When locktype is None, lockscreen app doesn't interfere with unlocking process.
+    // Therefor lockscreen app cannot notify unlock events to key-manager when locktype is None.
+    // So, to unlock user data when lock type is None, key-manager always try to unlock user data with null password.
+    // Even if the result is fail, it will be ignored.
+    Password nullPassword("");
+    m_logic->unlockUserKey(cred.uid, nullPassword);
+
     LogDebug("Process storage. Command: " << command);
 
     switch(static_cast<LogicCommand>(command)) {