2 * Copyright (c) 2000-2019 Samsung Electronics Co., Ltd. All rights reserved
4 * Contact: Dongsun Lee <ds73.lee@samsung.com>
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License
18 * @file client-common.cpp
19 * @author Bartlomiej Grzelewski (b.grzelewski@samsung.com)
21 * @brief This file is implementation of client-common functions.
23 #include <dpl/log/log.h>
25 #include <client-common.h>
26 #include <message-buffer.h>
27 #include <protocols.h>
29 #include <ckm/ckm-control.h>
33 class ControlImpl : public Control {
35 ControlImpl() : m_controlConnection(SERVICE_SOCKET_CKM_CONTROL) {}
36 ControlImpl(const ControlImpl &) = delete;
37 ControlImpl(ControlImpl &&) = delete;
38 ControlImpl &operator=(const ControlImpl &) = delete;
39 ControlImpl &operator=(ControlImpl &&) = delete;
41 virtual int unlockUserKey(uid_t user, const Password &password)
43 EXCEPTION_GUARD_START_CPPAPI
46 return CKM_API_ERROR_INPUT_PARAM;
49 auto send = MessageBuffer::Serialize(static_cast<int>
50 (ControlCommand::UNLOCK_USER_KEY),
54 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
56 if (CKM_API_SUCCESS != retCode)
59 recv.Deserialize(retCode);
66 virtual int lockUserKey(uid_t user)
68 EXCEPTION_GUARD_START_CPPAPI
71 return CKM_API_ERROR_INPUT_PARAM;
74 auto send = MessageBuffer::Serialize(static_cast<int>
75 (ControlCommand::LOCK_USER_KEY), user);
77 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
79 if (CKM_API_SUCCESS != retCode)
82 recv.Deserialize(retCode);
89 virtual int removeUserData(uid_t user)
91 EXCEPTION_GUARD_START_CPPAPI
94 return CKM_API_ERROR_INPUT_PARAM;
97 auto send = MessageBuffer::Serialize(static_cast<int>
98 (ControlCommand::REMOVE_USER_DATA), user);
100 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
102 if (CKM_API_SUCCESS != retCode)
105 recv.Deserialize(retCode);
112 virtual int changeUserPassword(uid_t user, const Password &oldPassword,
113 const Password &newPassword)
115 EXCEPTION_GUARD_START_CPPAPI
118 return CKM_API_ERROR_INPUT_PARAM;
121 auto send = MessageBuffer::Serialize(
122 static_cast<int>(ControlCommand::CHANGE_USER_PASSWORD),
127 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
129 if (CKM_API_SUCCESS != retCode)
132 recv.Deserialize(retCode);
139 virtual int resetUserPassword(uid_t user, const Password &newPassword)
141 EXCEPTION_GUARD_START_CPPAPI
144 return CKM_API_ERROR_INPUT_PARAM;
147 auto send = MessageBuffer::Serialize(
148 static_cast<int>(ControlCommand::RESET_USER_PASSWORD),
152 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
154 if (CKM_API_SUCCESS != retCode)
157 recv.Deserialize(retCode);
164 virtual int removeApplicationData(const ClientId &owner)
166 EXCEPTION_GUARD_START_CPPAPI
169 return CKM_API_ERROR_INPUT_PARAM;
172 auto send = MessageBuffer::Serialize(static_cast<int>
173 (ControlCommand::REMOVE_APP_DATA), owner);
175 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
177 if (CKM_API_SUCCESS != retCode)
180 recv.Deserialize(retCode);
187 virtual int updateCCMode()
189 EXCEPTION_GUARD_START_CPPAPI
192 auto send = MessageBuffer::Serialize(static_cast<int>
193 (ControlCommand::UPDATE_CC_MODE));
195 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
197 if (CKM_API_SUCCESS != retCode)
200 recv.Deserialize(retCode);
207 virtual int setPermission(uid_t user,
209 const ClientId &accessor,
210 PermissionMask permissionMask)
212 EXCEPTION_GUARD_START_CPPAPI
215 AliasSupport helper(alias);
216 auto send = MessageBuffer::Serialize(static_cast<int>
217 (ControlCommand::SET_PERMISSION),
218 static_cast<int>(user),
224 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
226 if (CKM_API_SUCCESS != retCode)
231 recv.Deserialize(command, counter, retCode);
238 virtual ~ControlImpl() {}
241 CKM::ServiceConnection m_controlConnection;
244 ControlShPtr Control::create()
247 return std::make_shared<ControlImpl>();
248 } catch (const std::bad_alloc &) {
249 LogDebug("Bad alloc was caught during ControlImpl creation.");
251 LogError("Critical error: Unknown exception was caught druing ControlImpl creation!");
254 return ControlShPtr();