• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "enterprise_device_mgr_stub.h"
17 #include "admin.h"
18 #include "ent_info.h"
19 #include "string_ex.h"
20 
21 using namespace OHOS::HiviewDFX;
22 
23 namespace OHOS {
24 namespace EDM {
EnterpriseDeviceMgrStub()25 EnterpriseDeviceMgrStub::EnterpriseDeviceMgrStub()
26 {
27     AddCallFuncMap();
28     EDMLOGI("EnterpriseDeviceMgrStub()");
29 }
30 
~EnterpriseDeviceMgrStub()31 EnterpriseDeviceMgrStub::~EnterpriseDeviceMgrStub()
32 {
33     EDMLOGI("~EnterpriseDeviceMgrStub()");
34 }
35 
AddCallFuncMap()36 void EnterpriseDeviceMgrStub::AddCallFuncMap()
37 {
38     memberFuncMap_[ADD_DEVICE_ADMIN] = &EnterpriseDeviceMgrStub::EnableAdminInner;
39     memberFuncMap_[REMOVE_DEVICE_ADMIN] = &EnterpriseDeviceMgrStub::DisableAdminInner;
40     memberFuncMap_[REMOVE_SUPER_ADMIN] = &EnterpriseDeviceMgrStub::DisableSuperAdminInner;
41     memberFuncMap_[GET_ENABLED_ADMIN] = &EnterpriseDeviceMgrStub::GetEnabledAdminInner;
42     memberFuncMap_[GET_ENT_INFO] = &EnterpriseDeviceMgrStub::GetEnterpriseInfoInner;
43     memberFuncMap_[SET_ENT_INFO] =  &EnterpriseDeviceMgrStub::SetEnterpriseInfoInner;
44     memberFuncMap_[IS_SUPER_ADMIN] =  &EnterpriseDeviceMgrStub::IsSuperAdminInner;
45     memberFuncMap_[IS_ADMIN_ENABLED] =  &EnterpriseDeviceMgrStub::IsAdminEnabledInner;
46     memberFuncMap_[SUBSCRIBE_MANAGED_EVENT] = &EnterpriseDeviceMgrStub::SubscribeManagedEventInner;
47     memberFuncMap_[UNSUBSCRIBE_MANAGED_EVENT] = &EnterpriseDeviceMgrStub::UnsubscribeManagedEventInner;
48 }
49 
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)50 int32_t EnterpriseDeviceMgrStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply,
51     MessageOption &option)
52 {
53     std::u16string descriptor = GetDescriptor();
54     std::u16string remoteDescriptor = data.ReadInterfaceToken();
55     EDMLOGI("EnterpriseDeviceMgrStub code %{public}u", code);
56     if (descriptor != remoteDescriptor) {
57         EDMLOGE("EnterpriseDeviceMgrStub code %{public}d client and service descriptors are inconsistent", code);
58         reply.WriteInt32(EdmReturnErrCode::PARAM_ERROR);
59         return EdmReturnErrCode::PARAM_ERROR;
60     }
61     if (SERVICE_FLAG(code)) {
62         auto func = memberFuncMap_.find(code);
63         if (func != memberFuncMap_.end()) {
64             auto memberFunc = func->second;
65             if (memberFunc != nullptr) {
66                 return (this->*memberFunc)(data, reply);
67             }
68         }
69     }
70     if (POLICY_FLAG(code)) {
71         EDMLOGD("POLICY_FLAG(code:%{public}x)\n", code);
72         if (FUNC_TO_OPERATE(code) == static_cast<int>(FuncOperateType::GET)) {
73             EDMLOGD("GetDevicePolicyInner");
74             return GetDevicePolicyInner(code, data, reply);
75         } else {
76             EDMLOGD("HandleDevicePolicyInner");
77             return HandleDevicePolicyInner(code, data, reply);
78         }
79     } else {
80         EDMLOGE("!POLICY_FLAG(code)");
81     }
82 
83     return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
84 }
85 
EnableAdminInner(MessageParcel & data,MessageParcel & reply)86 ErrCode EnterpriseDeviceMgrStub::EnableAdminInner(MessageParcel &data, MessageParcel &reply)
87 {
88     std::unique_ptr<AppExecFwk::ElementName> admin(data.ReadParcelable<AppExecFwk::ElementName>());
89     if (!admin) {
90         reply.WriteInt32(EdmReturnErrCode::PARAM_ERROR);
91         return EdmReturnErrCode::PARAM_ERROR;
92     }
93     EDMLOGD("EnableAdminInner bundleName:: %{public}s : abilityName : %{public}s ", admin->GetBundleName().c_str(),
94         admin->GetAbilityName().c_str());
95     std::unique_ptr<EntInfo> entInfo(data.ReadParcelable<EntInfo>());
96     uint32_t type = data.ReadUint32();
97     int32_t userId = data.ReadInt32();
98     ErrCode retCode = EnableAdmin(*admin, *entInfo, AdminType(type), userId);
99     reply.WriteInt32(retCode);
100     return ERR_OK;
101 }
102 
DisableAdminInner(MessageParcel & data,MessageParcel & reply)103 ErrCode EnterpriseDeviceMgrStub::DisableAdminInner(MessageParcel &data, MessageParcel &reply)
104 {
105     std::unique_ptr<AppExecFwk::ElementName> admin(data.ReadParcelable<AppExecFwk::ElementName>());
106     if (!admin) {
107         reply.WriteInt32(EdmReturnErrCode::PARAM_ERROR);
108         return EdmReturnErrCode::PARAM_ERROR;
109     }
110     int32_t userId = data.ReadInt32();
111     ErrCode retCode = DisableAdmin(*admin, userId);
112     reply.WriteInt32(retCode);
113     return ERR_OK;
114 }
115 
DisableSuperAdminInner(MessageParcel & data,MessageParcel & reply)116 ErrCode EnterpriseDeviceMgrStub::DisableSuperAdminInner(MessageParcel &data, MessageParcel &reply)
117 {
118     std::string bundleName = data.ReadString();
119     EDMLOGD("DisableSuperAdminInner bundleName:: %{public}s :", bundleName.c_str());
120     ErrCode retCode = DisableSuperAdmin(bundleName);
121     reply.WriteInt32(retCode);
122     return retCode;
123 }
124 
HandleDevicePolicyInner(uint32_t code,MessageParcel & data,MessageParcel & reply)125 ErrCode EnterpriseDeviceMgrStub::HandleDevicePolicyInner(uint32_t code, MessageParcel &data, MessageParcel &reply)
126 {
127     std::unique_ptr<AppExecFwk::ElementName> admin(data.ReadParcelable<AppExecFwk::ElementName>());
128     if (!admin) {
129         EDMLOGW("HandleDevicePolicyInner: ReadParcelable failed");
130         reply.WriteInt32(EdmReturnErrCode::PARAM_ERROR);
131         return ERR_EDM_PARAM_ERROR;
132     }
133     ErrCode errCode = HandleDevicePolicy(code, *admin, data);
134     reply.WriteInt32(errCode);
135     return errCode;
136 }
137 
GetDevicePolicyInner(uint32_t code,MessageParcel & data,MessageParcel & reply)138 ErrCode EnterpriseDeviceMgrStub::GetDevicePolicyInner(uint32_t code, MessageParcel &data, MessageParcel &reply)
139 {
140     AppExecFwk::ElementName *admin = nullptr;
141     if (data.ReadInt32() != ERR_OK) {
142         admin = AppExecFwk::ElementName::Unmarshalling(data);
143     } else {
144         admin = nullptr;
145     }
146     if (admin != nullptr) {
147         EDMLOGD("GetDevicePolicyInner bundleName:: %{public}s : abilityName : %{public}s code : %{public}x",
148             admin->GetBundleName().c_str(), admin->GetAbilityName().c_str(), code);
149     }
150     ErrCode retCode = GetDevicePolicy(code, admin, reply);
151     delete admin;
152     return retCode;
153 }
154 
GetEnabledAdminInner(MessageParcel & data,MessageParcel & reply)155 ErrCode EnterpriseDeviceMgrStub::GetEnabledAdminInner(MessageParcel &data, MessageParcel &reply)
156 {
157     EDMLOGD("EnterpriseDeviceMgrStub:GetEnabledAdmin");
158     uint32_t type = AdminType::UNKNOWN;
159     if (!data.ReadUint32(type)) {
160         reply.WriteInt32(EdmReturnErrCode::PARAM_ERROR);
161         EDMLOGE("EnterpriseDeviceMgrStub:GetEnabledAdminInner read type fail %{public}u", type);
162         return EdmReturnErrCode::PARAM_ERROR;
163     }
164     std::vector<std::string> enabledAdminList;
165     ErrCode res = GetEnabledAdmin((AdminType)type, enabledAdminList);
166     if (FAILED(res)) {
167         EDMLOGE("EnterpriseDeviceMgrStub:GetEnabledAdmin failed:%{public}d", res);
168         reply.WriteInt32(res);
169         return res;
170     }
171     reply.WriteInt32(ERR_OK);
172     std::vector<std::u16string> writeArray;
173     ArrayPolicyUtils::StringToU16String(enabledAdminList, writeArray);
174     reply.WriteString16Vector(writeArray);
175     return ERR_OK;
176 }
177 
GetEnterpriseInfoInner(MessageParcel & data,MessageParcel & reply)178 ErrCode EnterpriseDeviceMgrStub::GetEnterpriseInfoInner(MessageParcel &data, MessageParcel &reply)
179 {
180     EDMLOGD("EnterpriseDeviceMgrStub:GetEnterpriseInfoInner");
181     std::unique_ptr<AppExecFwk::ElementName> admin(data.ReadParcelable<AppExecFwk::ElementName>());
182     if (!admin) {
183         reply.WriteInt32(EdmReturnErrCode::PARAM_ERROR);
184         return EdmReturnErrCode::PARAM_ERROR;
185     }
186     EDMLOGD("GetEnterpriseInfoInner bundleName:: %{public}s : abilityName : %{public}s ",
187             admin->GetBundleName().c_str(), admin->GetAbilityName().c_str());
188 
189     return GetEnterpriseInfo(*admin, reply);
190 }
191 
IsSuperAdminInner(MessageParcel & data,MessageParcel & reply)192 ErrCode EnterpriseDeviceMgrStub::IsSuperAdminInner(MessageParcel &data, MessageParcel &reply)
193 {
194     EDMLOGD("EnterpriseDeviceMgrStub:IsSuperAdminInner");
195     std::string bundleName = data.ReadString();
196     EDMLOGD("IsSuperAdminInner bundleName:: %{public}s :", bundleName.c_str());
197     bool ret = IsSuperAdmin(bundleName);
198     reply.WriteInt32(ret);
199     return ERR_OK;
200 }
201 
IsAdminEnabledInner(MessageParcel & data,MessageParcel & reply)202 ErrCode EnterpriseDeviceMgrStub::IsAdminEnabledInner(MessageParcel &data, MessageParcel &reply)
203 {
204     EDMLOGD("EnterpriseDeviceMgrStub:IsAdminEnabled");
205     std::unique_ptr<AppExecFwk::ElementName> admin(data.ReadParcelable<AppExecFwk::ElementName>());
206     if (!admin) {
207         reply.WriteInt32(EdmReturnErrCode::PARAM_ERROR);
208         return EdmReturnErrCode::PARAM_ERROR;
209     }
210     int32_t userId = data.ReadInt32();
211     bool ret = IsAdminEnabled(*admin, userId);
212     reply.WriteInt32(ret);
213     return ERR_OK;
214 }
215 
SetEnterpriseInfoInner(MessageParcel & data,MessageParcel & reply)216 ErrCode EnterpriseDeviceMgrStub::SetEnterpriseInfoInner(MessageParcel &data, MessageParcel &reply)
217 {
218     EDMLOGD("EnterpriseDeviceMgrStub:SetEnterpriseInfoInner");
219     std::unique_ptr<AppExecFwk::ElementName> admin(data.ReadParcelable<AppExecFwk::ElementName>());
220     if (!admin) {
221         reply.WriteInt32(EdmReturnErrCode::PARAM_ERROR);
222         return EdmReturnErrCode::PARAM_ERROR;
223     }
224     std::unique_ptr<EntInfo> entInfo(data.ReadParcelable<EntInfo>());
225     ErrCode ret = SetEnterpriseInfo(*admin, *entInfo);
226     reply.WriteInt32(ret);
227     return ERR_OK;
228 }
229 
SubscribeManagedEventInner(MessageParcel & data,MessageParcel & reply)230 ErrCode EnterpriseDeviceMgrStub::SubscribeManagedEventInner(MessageParcel &data, MessageParcel &reply)
231 {
232     EDMLOGD("EnterpriseDeviceMgrStub:SubscribeManagedEventInner");
233     return SubscribeManagedEventInner(data, reply, true);
234 }
235 
UnsubscribeManagedEventInner(MessageParcel & data,MessageParcel & reply)236 ErrCode EnterpriseDeviceMgrStub::UnsubscribeManagedEventInner(MessageParcel &data, MessageParcel &reply)
237 {
238     EDMLOGD("EnterpriseDeviceMgrStub:UnsubscribeManagedEventInner");
239     return SubscribeManagedEventInner(data, reply, false);
240 }
241 
SubscribeManagedEventInner(MessageParcel & data,MessageParcel & reply,bool subscribe)242 ErrCode EnterpriseDeviceMgrStub::SubscribeManagedEventInner(MessageParcel &data, MessageParcel &reply, bool subscribe)
243 {
244     std::unique_ptr<AppExecFwk::ElementName> admin(data.ReadParcelable<AppExecFwk::ElementName>());
245     if (!admin) {
246         reply.WriteInt32(EdmReturnErrCode::PARAM_ERROR);
247         return EdmReturnErrCode::PARAM_ERROR;
248     }
249     std::vector<uint32_t> events;
250     data.ReadUInt32Vector(&events);
251     ErrCode code;
252     if (subscribe) {
253         code = SubscribeManagedEvent(*admin, events);
254     } else {
255         code = UnsubscribeManagedEvent(*admin, events);
256     }
257     reply.WriteInt32(code);
258     return code;
259 }
260 } // namespace EDM
261 } // namespace OHOS