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 "utils.h"
17 #include "parameters.h"
18
19 namespace OHOS {
20 namespace EDM {
21 namespace TEST {
22 uint64_t Utils::selfTokenId_ = 0;
23 const std::string SET_EDM_SERVICE = "persist.edm.edm_enable";
24 const std::string EDM_MANAGE_DATETIME_PERMISSION = "ohos.permission.SET_TIME";
25 const std::string EDM_FACTORY_RESET_PERMISSION = "ohos.permission.FACTORY_RESET";
26 const std::string EDM_MANAGE_LOCAL_ACCOUNTS_PERMISSION = "ohos.permission.MANAGE_LOCAL_ACCOUNTS";
27 const std::string EDM_MANAGE_SECURE_SETTINGS_PERMISSION = "ohos.permission.MANAGE_SECURE_SETTINGS";
28 const std::string PERMISSION_ENTERPRISE_SUBSCRIBE_MANAGED_EVENT = "ohos.permission.ENTERPRISE_SUBSCRIBE_MANAGED_EVENT";
29 const std::string PERMISSION_MANAGE_ENTERPRISE_DEVICE_ADMIN = "ohos.permission.MANAGE_ENTERPRISE_DEVICE_ADMIN";
30 const std::string PERMISSION_SET_ENTERPRISE_INFO = "ohos.permission.SET_ENTERPRISE_INFO";
31 const std::string PERMISSION_ACCESS_CERT_MANAGER_INTERNAL = "ohos.permission.ACCESS_CERT_MANAGER_INTERNAL";
32 const std::string PERMISSION_ACCESS_CERT_MANAGER = "ohos.permission.ACCESS_CERT_MANAGER";
33 const std::string PERMISSION_NETSYS_INTERNAL = "ohos.permission.NETSYS_INTERNAL";
34 const std::string PERMISSION_INSTALL_BUNDLE = "ohos.permission.INSTALL_BUNDLE";
35
ExecCmdSync(const std::string & cmd)36 void Utils::ExecCmdSync(const std::string &cmd)
37 {
38 FILE *fp = popen(cmd.c_str(), "r");
39 if (fp != nullptr) {
40 pclose(fp);
41 fp = nullptr;
42 }
43 }
44
SetNativeTokenTypeAndPermissions(const char * permissions[],int size)45 void Utils::SetNativeTokenTypeAndPermissions(const char* permissions[], int size)
46 {
47 uint64_t tokenId;
48 NativeTokenInfoParams infoInstance = {
49 .dcapsNum = 0,
50 .permsNum = size,
51 .aclsNum = 0,
52 .dcaps = nullptr,
53 .perms = permissions,
54 .acls = nullptr,
55 .aplStr = "system_basic",
56 };
57
58 infoInstance.processName = "EdmServicesUnitTest";
59 tokenId = GetAccessTokenId(&infoInstance);
60 SetSelfTokenID(tokenId);
61 seteuid(ROOT_UID);
62 OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
63 seteuid(EDM_UID);
64 }
65
SetEdmInitialEnv()66 void Utils::SetEdmInitialEnv()
67 {
68 selfTokenId_ = GetSelfTokenID();
69 const char* permissions[] = {
70 EDM_MANAGE_DATETIME_PERMISSION.c_str(),
71 EDM_FACTORY_RESET_PERMISSION.c_str(),
72 EDM_MANAGE_LOCAL_ACCOUNTS_PERMISSION.c_str(),
73 EDM_MANAGE_SECURE_SETTINGS_PERMISSION.c_str(),
74 PERMISSION_ENTERPRISE_SUBSCRIBE_MANAGED_EVENT.c_str(),
75 PERMISSION_MANAGE_ENTERPRISE_DEVICE_ADMIN.c_str(),
76 PERMISSION_SET_ENTERPRISE_INFO.c_str(),
77 PERMISSION_ACCESS_CERT_MANAGER_INTERNAL.c_str(),
78 PERMISSION_ACCESS_CERT_MANAGER.c_str(),
79 PERMISSION_NETSYS_INTERNAL.c_str(),
80 PERMISSION_INSTALL_BUNDLE.c_str()
81 };
82 Utils::SetNativeTokenTypeAndPermissions(permissions, sizeof(permissions) / sizeof(permissions[0]));
83 seteuid(Utils::EDM_UID);
84 }
85
ResetTokenTypeAndUid()86 void Utils::ResetTokenTypeAndUid()
87 {
88 seteuid(Utils::ROOT_UID);
89 SetSelfTokenID(selfTokenId_);
90 }
91
IsOriginalUTEnv()92 bool Utils::IsOriginalUTEnv()
93 {
94 return Utils::ROOT_UID == geteuid() && selfTokenId_ == GetSelfTokenID();
95 }
96
GetEdmServiceState()97 bool Utils::GetEdmServiceState()
98 {
99 std::string edmParaValue = system::GetParameter("persist.edm.edm_enable", "false");
100 return edmParaValue == "true";
101 }
102
SetEdmServiceEnable()103 void Utils::SetEdmServiceEnable()
104 {
105 system::SetParameter(SET_EDM_SERVICE, "true");
106 }
107
SetEdmServiceDisable()108 void Utils::SetEdmServiceDisable()
109 {
110 system::SetParameter(SET_EDM_SERVICE, "false");
111 }
112 } // namespace TEST
113 } // namespace EDM
114 } // namespace OHOS
115