• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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_admin_stub.h"
17 
18 #include <accesstoken_kit.h>
19 #include <ipc_skeleton.h>
20 
21 #include "edm_log.h"
22 
23 namespace OHOS {
24 namespace EDM {
25 
26 constexpr const int EDM_UID = 3057;
27 
EnterpriseAdminStub()28 EnterpriseAdminStub::EnterpriseAdminStub()
29 {
30     EDMLOGD("EnterpriseAdminStub()");
31 }
32 
~EnterpriseAdminStub()33 EnterpriseAdminStub::~EnterpriseAdminStub()
34 {
35     EDMLOGD("~EnterpriseAdminStub()");
36 }
37 
38 
CallFuncByCode(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)39 int32_t EnterpriseAdminStub::CallFuncByCode(uint32_t code, MessageParcel& data, MessageParcel& reply,
40     MessageOption &option)
41 {
42     switch (code) {
43         case COMMAND_ON_ADMIN_ENABLED:
44             OnAdminEnabledInner(data, reply);
45             return ERR_NONE;
46         case COMMAND_ON_ADMIN_DISABLED:
47             OnAdminDisabledInner(data, reply);
48             return ERR_NONE;
49         case COMMAND_ON_BUNDLE_ADDED:
50             OnBundleAddedInner(data, reply);
51             return ERR_NONE;
52         case COMMAND_ON_BUNDLE_REMOVED:
53             OnBundleRemovedInner(data, reply);
54             return ERR_NONE;
55         case COMMAND_ON_APP_START:
56             OnAppStartInner(data, reply);
57             return ERR_NONE;
58         case COMMAND_ON_APP_STOP:
59             OnAppStopInner(data, reply);
60             return ERR_NONE;
61         case COMMAND_ON_SYSTEM_UPDATE:
62             OnSystemUpdateInner(data, reply);
63             return ERR_NONE;
64         case COMMAND_ON_ACCOUNT_ADDED:
65             OnAccountAddedInner(data, reply);
66             return ERR_NONE;
67         case COMMAND_ON_ACCOUNT_SWITCHED:
68             OnAccountSwitchedInner(data, reply);
69             return ERR_NONE;
70         case COMMAND_ON_ACCOUNT_REMOVED:
71             OnAccountRemovedInner(data, reply);
72             return ERR_NONE;
73         default:
74             return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
75     }
76 }
77 
OnAdminEnabledInner(MessageParcel & data,MessageParcel & reply)78 void EnterpriseAdminStub::OnAdminEnabledInner(MessageParcel& data, MessageParcel& reply)
79 {
80     EDMLOGI("EnterpriseAdminStub::OnAdminEnabled");
81     OnAdminEnabled();
82 }
83 
OnAdminDisabledInner(MessageParcel & data,MessageParcel & reply)84 void EnterpriseAdminStub::OnAdminDisabledInner(MessageParcel& data, MessageParcel& reply)
85 {
86     EDMLOGI("EnterpriseAdminStub::OnAdminDisabled");
87     OnAdminDisabled();
88 }
89 
OnBundleAddedInner(MessageParcel & data,MessageParcel & reply)90 void EnterpriseAdminStub::OnBundleAddedInner(MessageParcel& data, MessageParcel& reply)
91 {
92     EDMLOGI("EnterpriseAdminStub::OnBundleAdded");
93     std::string bundleName = data.ReadString();
94     int32_t accountId = data.ReadInt32();
95     OnBundleAdded(bundleName, accountId);
96 }
97 
OnBundleRemovedInner(MessageParcel & data,MessageParcel & reply)98 void EnterpriseAdminStub::OnBundleRemovedInner(MessageParcel& data, MessageParcel& reply)
99 {
100     EDMLOGI("EnterpriseAdminStub::OnBundleRemoved");
101     std::string bundleName = data.ReadString();
102     int32_t accountId = data.ReadInt32();
103     OnBundleRemoved(bundleName, accountId);
104 }
105 
OnAppStartInner(MessageParcel & data,MessageParcel & reply)106 void EnterpriseAdminStub::OnAppStartInner(MessageParcel& data, MessageParcel& reply)
107 {
108     EDMLOGI("EnterpriseAdminStub::OnAppStart");
109     std::string bundleName = data.ReadString();
110     OnAppStart(bundleName);
111 }
112 
OnAppStopInner(MessageParcel & data,MessageParcel & reply)113 void EnterpriseAdminStub::OnAppStopInner(MessageParcel& data, MessageParcel& reply)
114 {
115     EDMLOGI("EnterpriseAdminStub::OnAppStop");
116     std::string bundleName = data.ReadString();
117     OnAppStop(bundleName);
118 }
119 
OnSystemUpdateInner(MessageParcel & data,MessageParcel & reply)120 void EnterpriseAdminStub::OnSystemUpdateInner(MessageParcel& data, MessageParcel& reply)
121 {
122     EDMLOGI("EnterpriseAdminStub::OnSystemUpdate");
123     UpdateInfo updateInfo;
124     updateInfo.version = data.ReadString();
125     updateInfo.firstReceivedTime = data.ReadInt64();
126     updateInfo.packageType = data.ReadString();
127     OnSystemUpdate(updateInfo);
128 }
129 
OnAccountAddedInner(MessageParcel & data,MessageParcel & reply)130 void EnterpriseAdminStub::OnAccountAddedInner(MessageParcel& data, MessageParcel& reply)
131 {
132     EDMLOGI("EnterpriseAdminStub::OnAccountAdded");
133     int32_t accountId = data.ReadInt32();
134     OnAccountAdded(accountId);
135 }
136 
OnAccountSwitchedInner(MessageParcel & data,MessageParcel & reply)137 void EnterpriseAdminStub::OnAccountSwitchedInner(MessageParcel& data, MessageParcel& reply)
138 {
139     EDMLOGI("EnterpriseAdminStub::OnAccountSwitched");
140     int32_t accountId = data.ReadInt32();
141     OnAccountSwitched(accountId);
142 }
143 
OnAccountRemovedInner(MessageParcel & data,MessageParcel & reply)144 void EnterpriseAdminStub::OnAccountRemovedInner(MessageParcel& data, MessageParcel& reply)
145 {
146     EDMLOGI("EnterpriseAdminStub::OnAccountRemoved");
147     int32_t accountId = data.ReadInt32();
148     OnAccountRemoved(accountId);
149 }
150 
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)151 int32_t EnterpriseAdminStub::OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply,
152     MessageOption &option)
153 {
154     auto remoteDescriptor = data.ReadInterfaceToken();
155     EDMLOGI("EnterpriseAdminStub code %{public}u", code);
156     if (GetDescriptor() != remoteDescriptor) {
157         EDMLOGE("EnterpriseAdminStub::OnRemoteRequest failed, descriptor is not matched!");
158         return ERR_INVALID_STATE;
159     }
160 
161     Security::AccessToken::AccessTokenID callerToken = IPCSkeleton::GetCallingTokenID();
162     Security::AccessToken::ATokenTypeEnum tokenType =
163         Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(callerToken);
164     if (tokenType != Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE) {
165         EDMLOGE("EnterpriseAdminStub::OnRemoteRequest failed, caller tokenType is not matched");
166         return ERR_INVALID_STATE;
167     }
168     int uid = GetCallingUid();
169     if (uid != EDM_UID) {
170         EDMLOGE("EnterpriseAdminStub::OnRemoteRequest failed, caller uid is not matched");
171         return ERR_INVALID_STATE;
172     }
173     return CallFuncByCode(code, data, reply, option);
174 }
175 } // namespace EDM
176 } // namespace OHOS
177