• 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     AddCallFuncMap();
31     EDMLOGD("EnterpriseAdminStub()");
32 }
33 
~EnterpriseAdminStub()34 EnterpriseAdminStub::~EnterpriseAdminStub()
35 {
36     EDMLOGD("~EnterpriseAdminStub()");
37 }
38 
AddCallFuncMap()39 void EnterpriseAdminStub::AddCallFuncMap()
40 {
41     memberFuncMap_[COMMAND_ON_ADMIN_ENABLED] = &EnterpriseAdminStub::OnAdminEnabledInner;
42     memberFuncMap_[COMMAND_ON_ADMIN_DISABLED] = &EnterpriseAdminStub::OnAdminDisabledInner;
43     memberFuncMap_[COMMAND_ON_BUNDLE_ADDED] = &EnterpriseAdminStub::OnBundleAddedInner;
44     memberFuncMap_[COMMAND_ON_BUNDLE_REMOVED] = &EnterpriseAdminStub::OnBundleRemovedInner;
45     memberFuncMap_[COMMAND_ON_APP_START] = &EnterpriseAdminStub::OnAppStartInner;
46     memberFuncMap_[COMMAND_ON_APP_STOP] = &EnterpriseAdminStub::OnAppStopInner;
47     memberFuncMap_[COMMAND_ON_SYSTEM_UPDATE] = &EnterpriseAdminStub::OnSystemUpdateInner;
48 }
49 
OnAdminEnabledInner(MessageParcel & data,MessageParcel & reply)50 void EnterpriseAdminStub::OnAdminEnabledInner(MessageParcel& data, MessageParcel& reply)
51 {
52     EDMLOGI("EnterpriseAdminStub::OnAdminEnabled");
53     OnAdminEnabled();
54 }
55 
OnAdminDisabledInner(MessageParcel & data,MessageParcel & reply)56 void EnterpriseAdminStub::OnAdminDisabledInner(MessageParcel& data, MessageParcel& reply)
57 {
58     EDMLOGI("EnterpriseAdminStub::OnAdminDisabled");
59     OnAdminDisabled();
60 }
61 
OnBundleAddedInner(MessageParcel & data,MessageParcel & reply)62 void EnterpriseAdminStub::OnBundleAddedInner(MessageParcel& data, MessageParcel& reply)
63 {
64     EDMLOGI("EnterpriseAdminStub::OnBundleAdded");
65     std::string bundleName = data.ReadString();
66     OnBundleAdded(bundleName);
67 }
68 
OnBundleRemovedInner(MessageParcel & data,MessageParcel & reply)69 void EnterpriseAdminStub::OnBundleRemovedInner(MessageParcel& data, MessageParcel& reply)
70 {
71     EDMLOGI("EnterpriseAdminStub::OnBundleRemoved");
72     std::string bundleName = data.ReadString();
73     OnBundleRemoved(bundleName);
74 }
75 
OnAppStartInner(MessageParcel & data,MessageParcel & reply)76 void EnterpriseAdminStub::OnAppStartInner(MessageParcel& data, MessageParcel& reply)
77 {
78     EDMLOGI("EnterpriseAdminStub::OnAppStart");
79     std::string bundleName = data.ReadString();
80     OnAppStart(bundleName);
81 }
82 
OnAppStopInner(MessageParcel & data,MessageParcel & reply)83 void EnterpriseAdminStub::OnAppStopInner(MessageParcel& data, MessageParcel& reply)
84 {
85     EDMLOGI("EnterpriseAdminStub::OnAppStop");
86     std::string bundleName = data.ReadString();
87     OnAppStop(bundleName);
88 }
89 
OnSystemUpdateInner(MessageParcel & data,MessageParcel & reply)90 void EnterpriseAdminStub::OnSystemUpdateInner(MessageParcel& data, MessageParcel& reply)
91 {
92     EDMLOGI("EnterpriseAdminStub::OnSystemUpdate");
93     UpdateInfo updateInfo;
94     updateInfo.version = data.ReadString();
95     updateInfo.firstReceivedTime = data.ReadInt64();
96     updateInfo.packageType = data.ReadString();
97     OnSystemUpdate(updateInfo);
98 }
99 
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)100 int32_t EnterpriseAdminStub::OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply,
101     MessageOption &option)
102 {
103     auto remoteDescriptor = data.ReadInterfaceToken();
104     EDMLOGI("EnterpriseAdminStub code %{public}u", code);
105     if (GetDescriptor() != remoteDescriptor) {
106         EDMLOGE("EnterpriseAdminStub::OnRemoteRequest failed, descriptor is not matched!");
107         return ERR_INVALID_STATE;
108     }
109 
110     Security::AccessToken::AccessTokenID callerToken = IPCSkeleton::GetCallingTokenID();
111     Security::AccessToken::ATokenTypeEnum tokenType =
112         Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(callerToken);
113     if (tokenType != Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE) {
114         EDMLOGE("EnterpriseAdminStub::OnRemoteRequest failed, caller tokenType is not matched");
115         return ERR_INVALID_STATE;
116     }
117     int uid = GetCallingUid();
118     if (uid != EDM_UID) {
119         EDMLOGE("EnterpriseAdminStub::OnRemoteRequest failed, caller uid is not matched");
120         return ERR_INVALID_STATE;
121     }
122 
123     auto func = memberFuncMap_.find(code);
124     if (func != memberFuncMap_.end()) {
125         auto memberFunc = func->second;
126         if (memberFunc != nullptr) {
127             (this->*memberFunc)(data, reply);
128             return ERR_NONE;
129         }
130         return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
131     }
132 
133     return ERR_TRANSACTION_FAILED;
134 }
135 } // namespace EDM
136 } // namespace OHOS
137