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
19namespace OHOS {
20namespace EDM {
21namespace TEST {
22uint64_t Utils::selfTokenId_ = 0;
23const std::string SET_EDM_SERVICE = "persist.edm.edm_enable";
24const std::string EDM_MANAGE_DATETIME_PERMISSION = "ohos.permission.SET_TIME";
25const std::string EDM_FACTORY_RESET_PERMISSION = "ohos.permission.FACTORY_RESET";
26const std::string EDM_MANAGE_LOCAL_ACCOUNTS_PERMISSION = "ohos.permission.MANAGE_LOCAL_ACCOUNTS";
27const std::string EDM_MANAGE_SECURE_SETTINGS_PERMISSION = "ohos.permission.MANAGE_SECURE_SETTINGS";
28const std::string PERMISSION_ENTERPRISE_SUBSCRIBE_MANAGED_EVENT = "ohos.permission.ENTERPRISE_SUBSCRIBE_MANAGED_EVENT";
29const std::string PERMISSION_MANAGE_ENTERPRISE_DEVICE_ADMIN = "ohos.permission.MANAGE_ENTERPRISE_DEVICE_ADMIN";
30const std::string PERMISSION_SET_ENTERPRISE_INFO = "ohos.permission.SET_ENTERPRISE_INFO";
31const std::string PERMISSION_ACCESS_CERT_MANAGER_INTERNAL = "ohos.permission.ACCESS_CERT_MANAGER_INTERNAL";
32const std::string PERMISSION_ACCESS_CERT_MANAGER = "ohos.permission.ACCESS_CERT_MANAGER";
33const std::string PERMISSION_ACCESS_BLUETOOTH = "ohos.permission.ACCESS_BLUETOOTH";
34const std::string PERMISSION_MANAGE_BLUETOOTH = "ohos.permission.MANAGE_BLUETOOTH";
35const std::string PERMISSION_NETSYS_INTERNAL = "ohos.permission.NETSYS_INTERNAL";
36const std::string PERMISSION_INSTALL_ENTERPRISE_NORMAL_BUNDLE = "ohos.permission.INSTALL_ENTERPRISE_NORMAL_BUNDLE";
37const std::string PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE = "ohos.permission.INSTALL_ENTERPRISE_MDM_BUNDLE";
38const std::string PERMISSION_INSTALL_SELF_BUNDLE = "ohos.permission.INSTALL_SELF_BUNDLE";
39const std::string PERMISSION_UNINSTALL_BUNDLE = "ohos.permission.UNINSTALL_BUNDLE";
40const std::string PERMISSION_RUNNING_STATE_OBSERVER = "ohos.permission.RUNNING_STATE_OBSERVER";
41const std::string PERMISSION_ENTERPRISE_MANAGE_SECURITY = "ohos.permission.ENTERPRISE_MANAGE_SECURITY";
42const std::string PERMISSION_ENTERPRISE_MANAGE_BLUETOOTH = "ohos.permission.ENTERPRISE_MANAGE_BLUETOOTH";
43const std::string PERMISSION_ENTERPRISE_MANAGE_LOCATION = "ohos.permission.ENTERPRISE_MANAGE_LOCATION";
44const std::string PERMISSION_ENTERPRISE_ACCESS_SCREEN_LOCK_INNER = "ohos.permission.ACCESS_SCREEN_LOCK_INNER";
45const std::string PERMISSION_REBOOT = "ohos.permission.REBOOT";
46const std::string PERMISSION_MANAGE_APP_BOOT_INTERNAL = "ohos.permission.MANAGE_APP_BOOT_INTERNAL";
47const std::string PERMISSION_CONNECTIVITY_INTERNAL = "ohos.permission.CONNECTIVITY_INTERNAL";
48const std::string PERMISSION_MANAGE_USB_CONFIG = "ohos.permission.MANAGE_USB_CONFIG";
49const std::string PERMISSION_STORAGE_MANAGER = "ohos.permission.STORAGE_MANAGER";
50const std::string PERMISSION_MOUNT_UNMOUNT_MANAGER = "ohos.permission.MOUNT_UNMOUNT_MANAGER";
51const std::string PERMISSION_GET_BUNDLE_INFO = "ohos.permission.GET_BUNDLE_INFO";
52const std::string PERSIST_BLUETOOTH_CONTROL = "persist.edm.prohibit_bluetooth";
53const std::string PERMISSION_ACCESS_USER_TRUSTED_CERT = "ohos.permission.ACCESS_USER_TRUSTED_CERT";
54const std::string PERMISSION_ACCESS_USER_AUTH_INTERNAL = "ohos.permission.ACCESS_USER_AUTH_INTERNAL";
55const std::string PERMISSION_SET_WIFI_INFO = "ohos.permission.SET_WIFI_INFO";
56const std::string PERMISSION_GET_WIFI_INFO = "ohos.permission.GET_WIFI_INFO";
57const std::string PERMISSION_MANAGE_WIFI_CONNECTION = "ohos.permission.MANAGE_WIFI_CONNECTION";
58const std::string PERMISSION_MANAGE_SETTINGS = "ohos.permission.MANAGE_SETTINGS";
59const std::string PERMISSION_MICROPHONE_CONTROL = "ohos.permission.MICROPHONE_CONTROL";
60const std::string PERMISSION_NETWORK_POLICY_MANAGE = "ohos.permission.MANAGE_NET_STRATEGY";
61const std::string PERMISSION_CAMERA = "ohos.permission.CAMERA";
62const std::string PERMISSION_CAMERA_CONTROL = "ohos.permission.CAMERA_CONTROL";
63void Utils::ExecCmdSync(const std::string &cmd)
64{
65    FILE *fp = popen(cmd.c_str(), "r");
66    if (fp != nullptr) {
67        pclose(fp);
68        fp = nullptr;
69    }
70}
71
72void Utils::SetNativeTokenTypeAndPermissions(const char* permissions[], int size)
73{
74    uint64_t tokenId;
75    NativeTokenInfoParams infoInstance = {
76        .dcapsNum = 0,
77        .permsNum = size,
78        .aclsNum = 0,
79        .dcaps = nullptr,
80        .perms = permissions,
81        .acls = nullptr,
82        .aplStr = "system_basic",
83    };
84
85    infoInstance.processName = "EdmServicesUnitTest";
86    tokenId = GetAccessTokenId(&infoInstance);
87    SetSelfTokenID(tokenId);
88    seteuid(ROOT_UID);
89    OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
90    seteuid(EDM_UID);
91}
92
93void Utils::SetEdmInitialEnv()
94{
95    selfTokenId_ = GetSelfTokenID();
96    const char* permissions[] = {
97        EDM_MANAGE_DATETIME_PERMISSION.c_str(),
98        EDM_FACTORY_RESET_PERMISSION.c_str(),
99        EDM_MANAGE_LOCAL_ACCOUNTS_PERMISSION.c_str(),
100        EDM_MANAGE_SECURE_SETTINGS_PERMISSION.c_str(),
101        PERMISSION_ENTERPRISE_SUBSCRIBE_MANAGED_EVENT.c_str(),
102        PERMISSION_MANAGE_ENTERPRISE_DEVICE_ADMIN.c_str(),
103        PERMISSION_SET_ENTERPRISE_INFO.c_str(),
104        PERMISSION_ACCESS_BLUETOOTH.c_str(),
105        PERMISSION_MANAGE_BLUETOOTH.c_str(),
106        PERMISSION_ACCESS_CERT_MANAGER_INTERNAL.c_str(),
107        PERMISSION_ACCESS_CERT_MANAGER.c_str(),
108        PERMISSION_NETSYS_INTERNAL.c_str(),
109        PERMISSION_INSTALL_ENTERPRISE_MDM_BUNDLE.c_str(),
110        PERMISSION_INSTALL_ENTERPRISE_NORMAL_BUNDLE.c_str(),
111        PERMISSION_INSTALL_SELF_BUNDLE.c_str(),
112        PERMISSION_UNINSTALL_BUNDLE.c_str(),
113        PERMISSION_RUNNING_STATE_OBSERVER.c_str(),
114        PERMISSION_ENTERPRISE_MANAGE_SECURITY.c_str(),
115        PERMISSION_ENTERPRISE_MANAGE_BLUETOOTH.c_str(),
116        PERMISSION_ENTERPRISE_MANAGE_LOCATION.c_str(),
117        PERMISSION_ENTERPRISE_ACCESS_SCREEN_LOCK_INNER.c_str(),
118        PERMISSION_REBOOT.c_str(),
119        PERMISSION_MANAGE_APP_BOOT_INTERNAL.c_str(),
120        PERMISSION_CONNECTIVITY_INTERNAL.c_str(),
121        PERMISSION_MANAGE_USB_CONFIG.c_str(),
122        PERMISSION_STORAGE_MANAGER.c_str(),
123        PERMISSION_MOUNT_UNMOUNT_MANAGER.c_str(),
124        PERMISSION_GET_BUNDLE_INFO.c_str(),
125        PERMISSION_ACCESS_USER_TRUSTED_CERT.c_str(),
126        PERMISSION_ACCESS_USER_AUTH_INTERNAL.c_str(),
127        PERMISSION_GET_WIFI_INFO.c_str(),
128        PERMISSION_SET_WIFI_INFO.c_str(),
129        PERMISSION_MANAGE_WIFI_CONNECTION.c_str(),
130        PERMISSION_MANAGE_SETTINGS.c_str(),
131        PERMISSION_MICROPHONE_CONTROL.c_str(),
132        PERMISSION_NETWORK_POLICY_MANAGE.c_str(),
133        PERMISSION_CAMERA.c_str(),
134        PERMISSION_CAMERA_CONTROL.c_str(),
135    };
136    Utils::SetNativeTokenTypeAndPermissions(permissions, sizeof(permissions) / sizeof(permissions[0]));
137    seteuid(Utils::EDM_UID);
138}
139
140void Utils::ResetTokenTypeAndUid()
141{
142    seteuid(Utils::ROOT_UID);
143    SetSelfTokenID(selfTokenId_);
144}
145
146bool Utils::IsOriginalUTEnv()
147{
148    return Utils::ROOT_UID == geteuid() && selfTokenId_ == GetSelfTokenID();
149}
150
151bool Utils::GetEdmServiceState()
152{
153    std::string edmParaValue = system::GetParameter("persist.edm.edm_enable", "false");
154    return edmParaValue == "true";
155}
156
157void Utils::SetEdmServiceEnable()
158{
159    system::SetParameter(SET_EDM_SERVICE, "true");
160}
161
162void Utils::SetEdmServiceDisable()
163{
164    system::SetParameter(SET_EDM_SERVICE, "false");
165}
166
167void Utils::SetBluetoothEnable()
168{
169    system::SetParameter(PERSIST_BLUETOOTH_CONTROL, "false");
170}
171
172void Utils::SetBluetoothDisable()
173{
174    system::SetParameter(PERSIST_BLUETOOTH_CONTROL, "true");
175}
176} // namespace TEST
177} // namespace EDM
178} // namespace OHOS
179