2 * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Contact: Bumjin Im <bj.im@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-control.cpp
19 * @author Bartlomiej Grzelewski (b.grzelewski@samsung.com)
21 * @brief This file is implementation of client-control 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(const ClientInfo &clientInfo, const Password &password) {
42 return try_catch([&] {
43 if((int)clientInfo.getUID() < 0) {
44 return CKM_API_ERROR_INPUT_PARAM;
48 auto send = MessageBuffer::Serialize(static_cast<int>(ControlCommand::UNLOCK_USER_KEY),
49 clientInfo.getClientID(),
52 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
53 if (CKM_API_SUCCESS != retCode)
56 recv.Deserialize(retCode);
62 virtual int lockUserKey(const ClientInfo &clientInfo) {
63 return try_catch([&] {
64 if((int)clientInfo.getUID() < 0) {
65 return CKM_API_ERROR_INPUT_PARAM;
69 auto send = MessageBuffer::Serialize(static_cast<int>(ControlCommand::LOCK_USER_KEY),
70 clientInfo.getClientID());
72 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
73 if (CKM_API_SUCCESS != retCode)
76 recv.Deserialize(retCode);
81 virtual int removeUserData(const ClientInfo &clientInfo) {
82 return try_catch([&] {
83 if((int)clientInfo.getUID() < 0) {
84 return CKM_API_ERROR_INPUT_PARAM;
88 auto send = MessageBuffer::Serialize(static_cast<int>(ControlCommand::REMOVE_USER_DATA),
89 clientInfo.getClientID());
91 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
92 if (CKM_API_SUCCESS != retCode)
95 recv.Deserialize(retCode);
100 virtual int changeUserPassword(const ClientInfo &clientInfo, const Password &oldPassword, const Password &newPassword) {
101 return try_catch([&] {
102 if((int)clientInfo.getUID() < 0) {
103 return CKM_API_ERROR_INPUT_PARAM;
107 auto send = MessageBuffer::Serialize(
108 static_cast<int>(ControlCommand::CHANGE_USER_PASSWORD),
109 clientInfo.getClientID(),
113 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
114 if (CKM_API_SUCCESS != retCode)
117 recv.Deserialize(retCode);
123 virtual int resetUserPassword(const ClientInfo &clientInfo, const Password &newPassword) {
124 return try_catch([&] {
125 if((int)clientInfo.getUID() < 0) {
126 return CKM_API_ERROR_INPUT_PARAM;
130 auto send = MessageBuffer::Serialize(
131 static_cast<int>(ControlCommand::RESET_USER_PASSWORD),
132 clientInfo.getClientID(),
135 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
136 if (CKM_API_SUCCESS != retCode)
139 recv.Deserialize(retCode);
145 virtual int removeApplicationData(const std::string &zone, const Label &smackLabel) {
146 return try_catch([&] {
147 if (smackLabel.empty()) {
148 return CKM_API_ERROR_INPUT_PARAM;
152 auto send = MessageBuffer::Serialize(static_cast<int>(ControlCommand::REMOVE_APP_DATA),
156 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
157 if (CKM_API_SUCCESS != retCode)
160 recv.Deserialize(retCode);
166 virtual int updateCCMode() {
167 return try_catch([&] {
169 auto send = MessageBuffer::Serialize(static_cast<int>(ControlCommand::UPDATE_CC_MODE));
171 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
172 if (CKM_API_SUCCESS != retCode)
175 recv.Deserialize(retCode);
181 virtual int setPermission(const ClientInfo &clientInfo,
183 const Label &accessor,
184 PermissionMask permissionMask)
186 return try_catch([&] {
188 AliasSupport helper(alias);
189 auto send = MessageBuffer::Serialize(static_cast<int>(ControlCommand::SET_PERMISSION),
190 clientInfo.getClientID(),
196 int retCode = m_controlConnection.processRequest(send.Pop(), recv);
197 if (CKM_API_SUCCESS != retCode)
202 recv.Deserialize(command, counter, retCode);
208 virtual ~ControlImpl(){}
210 CKM::ServiceConnection m_controlConnection;
213 ControlShPtr Control::create() {
215 return std::make_shared<ControlImpl>();
216 } catch (const std::bad_alloc &) {
217 LogDebug("Bad alloc was caught during ControlImpl creation.");
219 LogError("Critical error: Unknown exception was caught druing ControlImpl creation!");
221 return ControlShPtr();