#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);
}
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);
}
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);
}
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();
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)) {