1 /*
2 * Copyright (c) 2021-2024 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 "ipc/storage_manager_stub.h"
17 #include "accesstoken_kit.h"
18 #include "ipc_skeleton.h"
19 #include "storage_manager_ipc_interface_code.h"
20 #include "storage_service_errno.h"
21 #include "storage_service_log.h"
22
23 namespace OHOS {
24 namespace StorageManager {
25 using namespace std;
26
27 constexpr pid_t ACCOUNT_UID = 3058;
28 constexpr pid_t BACKUP_SA_UID = 1089;
29 constexpr pid_t FOUNDATION_UID = 5523;
30 constexpr pid_t DFS_UID = 1009;
31 const std::string PERMISSION_STORAGE_MANAGER_CRYPT = "ohos.permission.STORAGE_MANAGER_CRYPT";
32 const std::string PERMISSION_STORAGE_MANAGER = "ohos.permission.STORAGE_MANAGER";
33 const std::string PERMISSION_MOUNT_MANAGER = "ohos.permission.MOUNT_UNMOUNT_MANAGER";
34 const std::string PERMISSION_FORMAT_MANAGER = "ohos.permission.MOUNT_FORMAT_MANAGER";
35 const std::string PROCESS_NAME_FOUNDATION = "foundation";
36
CheckClientPermission(const std::string & permissionStr)37 bool CheckClientPermission(const std::string& permissionStr)
38 {
39 Security::AccessToken::AccessTokenID tokenCaller = IPCSkeleton::GetCallingTokenID();
40 auto uid = IPCSkeleton::GetCallingUid();
41 auto tokenType = Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenCaller);
42 int res;
43 if (tokenType == Security::AccessToken::TOKEN_NATIVE && uid == ACCOUNT_UID) {
44 res = Security::AccessToken::PermissionState::PERMISSION_GRANTED;
45 } else {
46 res = Security::AccessToken::AccessTokenKit::VerifyAccessToken(tokenCaller, permissionStr);
47 }
48
49 if (res == Security::AccessToken::PermissionState::PERMISSION_GRANTED) {
50 LOGD("StorageMangaer permissionCheck pass!");
51 return true;
52 }
53 LOGE("StorageManager permissionCheck error, need %{public}s", permissionStr.c_str());
54 return false;
55 }
56
CheckClientPermissionForCrypt(const std::string & permissionStr)57 bool CheckClientPermissionForCrypt(const std::string& permissionStr)
58 {
59 Security::AccessToken::AccessTokenID tokenCaller = IPCSkeleton::GetCallingTokenID();
60 int res = Security::AccessToken::AccessTokenKit::VerifyAccessToken(tokenCaller, permissionStr);
61 if (res == Security::AccessToken::PermissionState::PERMISSION_GRANTED) {
62 LOGD("StorageMangaer permissionCheck pass!");
63 return true;
64 }
65 LOGE("StorageManager permissionCheck error, need %{public}s", permissionStr.c_str());
66 return false;
67 }
68
CheckClientPermissionForShareFile()69 bool CheckClientPermissionForShareFile()
70 {
71 Security::AccessToken::AccessTokenID tokenCaller = IPCSkeleton::GetCallingTokenID();
72 Security::AccessToken::NativeTokenInfo nativeInfo;
73 Security::AccessToken::AccessTokenKit::GetNativeTokenInfo(tokenCaller, nativeInfo);
74
75 auto uid = IPCSkeleton::GetCallingUid();
76 if (nativeInfo.processName != PROCESS_NAME_FOUNDATION || uid != FOUNDATION_UID) {
77 LOGE("CheckClientPermissionForShareFile error, processName is %{public}s, uid is %{public}d",
78 nativeInfo.processName.c_str(), uid);
79 return false;
80 }
81
82 return true;
83 }
84
StorageManagerStub()85 StorageManagerStub::StorageManagerStub()
86 {
87 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::PREPARE_ADD_USER)] =
88 &StorageManagerStub::HandlePrepareAddUser;
89 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::REMOVE_USER)] =
90 &StorageManagerStub::HandleRemoveUser;
91 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::PREPARE_START_USER)] =
92 &StorageManagerStub::HandlePrepareStartUser;
93 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::STOP_USER)] =
94 &StorageManagerStub::HandleStopUser;
95 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_TOTAL)] =
96 &StorageManagerStub::HandleGetTotal;
97 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_FREE)] =
98 &StorageManagerStub::HandleGetFree;
99 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_SYSTEM_SIZE)] =
100 &StorageManagerStub::HandleGetSystemSize;
101 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_TOTAL_SIZE)] =
102 &StorageManagerStub::HandleGetTotalSize;
103 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_FREE_SIZE)] =
104 &StorageManagerStub::HandleGetFreeSize;
105 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_CURR_USER_STATS)] =
106 &StorageManagerStub::HandleGetCurrUserStorageStats;
107 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_USER_STATS)] =
108 &StorageManagerStub::HandleGetUserStorageStats;
109 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_USER_STATS_BY_TYPE)] =
110 &StorageManagerStub::HandleGetUserStorageStatsByType;
111 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_CURR_BUNDLE_STATS)] =
112 &StorageManagerStub::HandleGetCurrentBundleStats;
113 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_BUNDLE_STATUS)] =
114 &StorageManagerStub::HandleGetBundleStatus;
115 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::NOTIFY_VOLUME_CREATED)] =
116 &StorageManagerStub::HandleNotifyVolumeCreated;
117 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::NOTIFY_VOLUME_MOUNTED)] =
118 &StorageManagerStub::HandleNotifyVolumeMounted;
119 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::NOTIFY_VOLUME_STATE_CHANGED)] =
120 &StorageManagerStub::HandleNotifyVolumeStateChanged;
121 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::MOUNT)] =
122 &StorageManagerStub::HandleMount;
123 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::UNMOUNT)] =
124 &StorageManagerStub::HandleUnmount;
125 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_ALL_VOLUMES)] =
126 &StorageManagerStub::HandleGetAllVolumes;
127 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::NOTIFY_DISK_CREATED)] =
128 &StorageManagerStub::HandleNotifyDiskCreated;
129 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::NOTIFY_DISK_DESTROYED)] =
130 &StorageManagerStub::HandleNotifyDiskDestroyed;
131 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::PARTITION)] =
132 &StorageManagerStub::HandlePartition;
133 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_ALL_DISKS)] =
134 &StorageManagerStub::HandleGetAllDisks;
135 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_VOL_BY_UUID)] =
136 &StorageManagerStub::HandleGetVolumeByUuid;
137 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_VOL_BY_ID)] =
138 &StorageManagerStub::HandleGetVolumeById;
139 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::SET_VOL_DESC)] =
140 &StorageManagerStub::HandleSetVolDesc;
141 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::FORMAT)] =
142 &StorageManagerStub::HandleFormat;
143 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_DISK_BY_ID)] =
144 &StorageManagerStub::HandleGetDiskById;
145 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::CREATE_USER_KEYS)] =
146 &StorageManagerStub::HandleGenerateUserKeys;
147 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::DELETE_USER_KEYS)] =
148 &StorageManagerStub::HandleDeleteUserKeys;
149 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::UPDATE_USER_AUTH)] =
150 &StorageManagerStub::HandleUpdateUserAuth;
151 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::ACTIVE_USER_KEY)] =
152 &StorageManagerStub::HandleActiveUserKey;
153 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::INACTIVE_USER_KEY)] =
154 &StorageManagerStub::HandleInactiveUserKey;
155 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::LOCK_USER_SCREEN)] =
156 &StorageManagerStub::HandleLockUserScreen;
157 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::UNLOCK_USER_SCREEN)] =
158 &StorageManagerStub::HandleUnlockUserScreen;
159 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::LOCK_SCREEN_STATUS)] =
160 &StorageManagerStub::HandleGetLockScreenStatus;
161 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::UPDATE_KEY_CONTEXT)] =
162 &StorageManagerStub::HandleUpdateKeyContext;
163 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::CREATE_SHARE_FILE)] =
164 &StorageManagerStub::HandleCreateShareFile;
165 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::DELETE_SHARE_FILE)] =
166 &StorageManagerStub::HandleDeleteShareFile;
167 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::SET_BUNDLE_QUOTA)] =
168 &StorageManagerStub::HandleSetBundleQuota;
169 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::UPDATE_MEM_PARA)] =
170 &StorageManagerStub::HandleUpdateMemoryPara;
171 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_BUNDLE_STATS_INCREASE)] =
172 &StorageManagerStub::HandleGetBundleStatsForIncrease;
173 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GENERATE_APP_KEY)] =
174 &StorageManagerStub::HandleGenerateAppkey;
175 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::DELETE_APP_KEY)] =
176 &StorageManagerStub::HandleDeleteAppkey;
177 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::MOUNT_DFS_DOCS)] =
178 &StorageManagerStub::HandleMountDfsDocs;
179 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::UMOUNT_DFS_DOCS)] =
180 &StorageManagerStub::HandleUMountDfsDocs;
181 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_FILE_ENCRYPT_STATUS)] =
182 &StorageManagerStub::HandleGetFileEncryptStatus;
183 opToInterfaceMap_[static_cast<uint32_t>(StorageManagerInterfaceCode::GET_USER_NEED_ACTIVE_STATUS)] =
184 &StorageManagerStub::HandleGetUserNeedActiveStatus;
185 }
186
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)187 int32_t StorageManagerStub::OnRemoteRequest(uint32_t code,
188 MessageParcel &data, MessageParcel &reply, MessageOption &option)
189 {
190 if (data.ReadInterfaceToken() != GetDescriptor()) {
191 return E_PERMISSION_DENIED;
192 }
193 switch (code) {
194 case static_cast<uint32_t>(StorageManagerInterfaceCode::PREPARE_ADD_USER):
195 return HandlePrepareAddUser(data, reply);
196 case static_cast<uint32_t>(StorageManagerInterfaceCode::REMOVE_USER):
197 return HandleRemoveUser(data, reply);
198 case static_cast<uint32_t>(StorageManagerInterfaceCode::PREPARE_START_USER):
199 return HandlePrepareStartUser(data, reply);
200 case static_cast<uint32_t>(StorageManagerInterfaceCode::STOP_USER):
201 return HandleStopUser(data, reply);
202 case static_cast<uint32_t>(StorageManagerInterfaceCode::COMPLETE_ADD_USER):
203 return HandleCompleteAddUser(data, reply);
204 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_TOTAL):
205 return HandleGetTotal(data, reply);
206 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_FREE):
207 return HandleGetFree(data, reply);
208 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_SYSTEM_SIZE):
209 return HandleGetSystemSize(data, reply);
210 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_TOTAL_SIZE):
211 return HandleGetTotalSize(data, reply);
212 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_FREE_SIZE):
213 return HandleGetFreeSize(data, reply);
214 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_CURR_USER_STATS):
215 return HandleGetCurrUserStorageStats(data, reply);
216 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_USER_STATS):
217 return HandleGetUserStorageStats(data, reply);
218 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_USER_STATS_BY_TYPE):
219 return HandleGetUserStorageStatsByType(data, reply);
220 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_CURR_BUNDLE_STATS):
221 return HandleGetCurrentBundleStats(data, reply);
222 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_BUNDLE_STATUS):
223 return HandleGetBundleStatus(data, reply);
224 case static_cast<uint32_t>(StorageManagerInterfaceCode::NOTIFY_VOLUME_CREATED):
225 return HandleNotifyVolumeCreated(data, reply);
226 case static_cast<uint32_t>(StorageManagerInterfaceCode::NOTIFY_VOLUME_MOUNTED):
227 return HandleNotifyVolumeMounted(data, reply);
228 case static_cast<uint32_t>(StorageManagerInterfaceCode::NOTIFY_VOLUME_STATE_CHANGED):
229 return HandleNotifyVolumeStateChanged(data, reply);
230 case static_cast<uint32_t>(StorageManagerInterfaceCode::MOUNT):
231 return HandleMount(data, reply);
232 case static_cast<uint32_t>(StorageManagerInterfaceCode::UNMOUNT):
233 return HandleUnmount(data, reply);
234 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_ALL_VOLUMES):
235 return HandleGetAllVolumes(data, reply);
236 case static_cast<uint32_t>(StorageManagerInterfaceCode::NOTIFY_DISK_CREATED):
237 return HandleNotifyDiskCreated(data, reply);
238 case static_cast<uint32_t>(StorageManagerInterfaceCode::NOTIFY_DISK_DESTROYED):
239 return HandleNotifyDiskDestroyed(data, reply);
240 case static_cast<uint32_t>(StorageManagerInterfaceCode::PARTITION):
241 return HandlePartition(data, reply);
242 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_ALL_DISKS):
243 return HandleGetAllDisks(data, reply);
244 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_VOL_BY_UUID):
245 return HandleGetVolumeByUuid(data, reply);
246 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_VOL_BY_ID):
247 return HandleGetVolumeById(data, reply);
248 case static_cast<uint32_t>(StorageManagerInterfaceCode::SET_VOL_DESC):
249 return HandleSetVolDesc(data, reply);
250 case static_cast<uint32_t>(StorageManagerInterfaceCode::FORMAT):
251 return HandleFormat(data, reply);
252 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_DISK_BY_ID):
253 return HandleGetDiskById(data, reply);
254 case static_cast<uint32_t>(StorageManagerInterfaceCode::CREATE_USER_KEYS):
255 return HandleGenerateUserKeys(data, reply);
256 case static_cast<uint32_t>(StorageManagerInterfaceCode::DELETE_USER_KEYS):
257 return HandleDeleteUserKeys(data, reply);
258 case static_cast<uint32_t>(StorageManagerInterfaceCode::UPDATE_USER_AUTH):
259 return HandleUpdateUserAuth(data, reply);
260 case static_cast<uint32_t>(StorageManagerInterfaceCode::ACTIVE_USER_KEY):
261 return HandleActiveUserKey(data, reply);
262 case static_cast<uint32_t>(StorageManagerInterfaceCode::INACTIVE_USER_KEY):
263 return HandleInactiveUserKey(data, reply);
264 case static_cast<uint32_t>(StorageManagerInterfaceCode::LOCK_USER_SCREEN):
265 return HandleLockUserScreen(data, reply);
266 case static_cast<uint32_t>(StorageManagerInterfaceCode::UNLOCK_USER_SCREEN):
267 return HandleUnlockUserScreen(data, reply);
268 case static_cast<uint32_t>(StorageManagerInterfaceCode::LOCK_SCREEN_STATUS):
269 return HandleGetLockScreenStatus(data, reply);
270 case static_cast<uint32_t>(StorageManagerInterfaceCode::UPDATE_KEY_CONTEXT):
271 return HandleUpdateKeyContext(data, reply);
272 case static_cast<uint32_t>(StorageManagerInterfaceCode::CREATE_SHARE_FILE):
273 return HandleCreateShareFile(data, reply);
274 case static_cast<uint32_t>(StorageManagerInterfaceCode::DELETE_SHARE_FILE):
275 return HandleDeleteShareFile(data, reply);
276 case static_cast<uint32_t>(StorageManagerInterfaceCode::SET_BUNDLE_QUOTA):
277 return HandleSetBundleQuota(data, reply);
278 case static_cast<uint32_t>(StorageManagerInterfaceCode::UPDATE_MEM_PARA):
279 return HandleUpdateMemoryPara(data, reply);
280 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_BUNDLE_STATS_INCREASE):
281 return HandleGetBundleStatsForIncrease(data, reply);
282 case static_cast<uint32_t>(StorageManagerInterfaceCode::MOUNT_DFS_DOCS):
283 return HandleMountDfsDocs(data, reply);
284 case static_cast<uint32_t>(StorageManagerInterfaceCode::UMOUNT_DFS_DOCS):
285 return HandleUMountDfsDocs(data, reply);
286 case static_cast<uint32_t>(StorageManagerInterfaceCode::GENERATE_APP_KEY):
287 return HandleGenerateAppkey(data, reply);
288 case static_cast<uint32_t>(StorageManagerInterfaceCode::DELETE_APP_KEY):
289 return HandleDeleteAppkey(data, reply);
290 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_FILE_ENCRYPT_STATUS):
291 return HandleGetFileEncryptStatus(data, reply);
292 case static_cast<uint32_t>(StorageManagerInterfaceCode::GET_USER_NEED_ACTIVE_STATUS):
293 return HandleGetUserNeedActiveStatus(data, reply);
294 default:
295 LOGE("Cannot response request %d: unknown tranction", code);
296 return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
297 }
298 }
299
HandlePrepareAddUser(MessageParcel & data,MessageParcel & reply)300 int32_t StorageManagerStub::HandlePrepareAddUser(MessageParcel &data, MessageParcel &reply)
301 {
302 if (!CheckClientPermissionForCrypt(PERMISSION_STORAGE_MANAGER_CRYPT) &&
303 IPCSkeleton::GetCallingUid() != ACCOUNT_UID) {
304 return E_PERMISSION_DENIED;
305 }
306 int32_t userId = data.ReadInt32();
307 uint32_t flags = data.ReadUint32();
308 LOGI("StorageManagerStub::HandlePrepareAddUser, userId:%{public}d", userId);
309 int err = PrepareAddUser(userId, flags);
310 if (!reply.WriteUint32(err)) {
311 LOGE("StorageManagerStub::HandlePrepareAddUser call PrepareAddUser failed");
312 return E_WRITE_REPLY_ERR;
313 }
314 return E_OK;
315 }
316
HandleRemoveUser(MessageParcel & data,MessageParcel & reply)317 int32_t StorageManagerStub::HandleRemoveUser(MessageParcel &data, MessageParcel &reply)
318 {
319 if (!CheckClientPermissionForCrypt(PERMISSION_STORAGE_MANAGER_CRYPT) &&
320 IPCSkeleton::GetCallingUid() != ACCOUNT_UID) {
321 return E_PERMISSION_DENIED;
322 }
323 int32_t userId = data.ReadInt32();
324 uint32_t flags = data.ReadUint32();
325 LOGI("StorageManagerStub::HandleRemoveUser, userId:%{public}d", userId);
326 int err = RemoveUser(userId, flags);
327 if (!reply.WriteUint32(err)) {
328 LOGE("StorageManagerStub::HandleRemoveUser call RemoveUser failed");
329 return E_WRITE_REPLY_ERR;
330 }
331 return E_OK;
332 }
333
HandlePrepareStartUser(MessageParcel & data,MessageParcel & reply)334 int32_t StorageManagerStub::HandlePrepareStartUser(MessageParcel &data, MessageParcel &reply)
335 {
336 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
337 return E_PERMISSION_DENIED;
338 }
339 int32_t userId = data.ReadInt32();
340 LOGI("StorageManagerStub::HandlePrepareStartUser, userId:%{public}d", userId);
341 int err = PrepareStartUser(userId);
342 if (!reply.WriteUint32(err)) {
343 LOGE("StorageManagerStub::HandlePrepareStartUser call PrepareStartUser failed");
344 return E_WRITE_REPLY_ERR;
345 }
346 return E_OK;
347 }
348
HandleStopUser(MessageParcel & data,MessageParcel & reply)349 int32_t StorageManagerStub::HandleStopUser(MessageParcel &data, MessageParcel &reply)
350 {
351 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
352 return E_PERMISSION_DENIED;
353 }
354 int32_t userId = data.ReadInt32();
355 LOGI("StorageManagerStub::HandleStopUser, userId:%{public}d", userId);
356 int err = StopUser(userId);
357 if (!reply.WriteUint32(err)) {
358 LOGE("StorageManagerStub::HandleStopUser call StopUser failed");
359 return E_WRITE_REPLY_ERR;
360 }
361 return E_OK;
362 }
363
HandleCompleteAddUser(MessageParcel & data,MessageParcel & reply)364 int32_t StorageManagerStub::HandleCompleteAddUser(MessageParcel &data, MessageParcel &reply)
365 {
366 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
367 return E_PERMISSION_DENIED;
368 }
369 int32_t userId = data.ReadInt32();
370 LOGI("StorageManagerStub::HandleCompleteAddUser, userId:%{public}d", userId);
371 int err = CompleteAddUser(userId);
372 if (!reply.WriteUint32(err)) {
373 LOGE("StorageManagerStub::HandleCompleteAddUser call CompleteAddUser failed");
374 return E_WRITE_REPLY_ERR;
375 }
376 return E_OK;
377 }
378
HandleGetTotal(MessageParcel & data,MessageParcel & reply)379 int32_t StorageManagerStub::HandleGetTotal(MessageParcel &data, MessageParcel &reply)
380 {
381 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
382 return E_PERMISSION_DENIED;
383 }
384 LOGE("StorageManagerStub::HandleGetTotal Begin.");
385 std::string volumeId = data.ReadString();
386 int64_t totalSize;
387 int32_t err = GetTotalSizeOfVolume(volumeId, totalSize);
388 if (!reply.WriteInt32(err)) {
389 LOGE("StorageManagerStub::HandleGetTotal call OnUserDGetTotalSizeOfVolume failed");
390 return E_WRITE_REPLY_ERR;
391 }
392 if (!reply.WriteInt64(totalSize)) {
393 return E_WRITE_REPLY_ERR;
394 }
395 return E_OK;
396 }
397
HandleGetFree(MessageParcel & data,MessageParcel & reply)398 int32_t StorageManagerStub::HandleGetFree(MessageParcel &data, MessageParcel &reply)
399 {
400 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
401 return E_PERMISSION_DENIED;
402 }
403 std::string volumeId = data.ReadString();
404 int64_t freeSize;
405 int32_t err = GetFreeSizeOfVolume(volumeId, freeSize);
406 if (!reply.WriteInt32(err)) {
407 LOGE("StorageManagerStub::HandleGetFree call GetFreeSizeOfVolume failed");
408 return E_WRITE_REPLY_ERR;
409 }
410 if (!reply.WriteInt64(freeSize)) {
411 return E_WRITE_REPLY_ERR;
412 }
413 return E_OK;
414 }
415
HandleGetBundleStatus(MessageParcel & data,MessageParcel & reply)416 int32_t StorageManagerStub::HandleGetBundleStatus(MessageParcel &data, MessageParcel &reply)
417 {
418 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
419 return E_PERMISSION_DENIED;
420 }
421 std::string pkgName = data.ReadString();
422 int32_t appIndex = data.ReadInt32();
423 uint32_t statFlag = data.ReadUint32();
424 BundleStats bundleStats;
425 int32_t err = GetBundleStats(pkgName, bundleStats, appIndex, statFlag);
426 if (!reply.WriteInt32(err)) {
427 return E_WRITE_REPLY_ERR;
428 }
429 if (!bundleStats.Marshalling(reply)) {
430 return E_WRITE_REPLY_ERR;
431 }
432 return E_OK;
433 }
434
HandleGetSystemSize(MessageParcel & data,MessageParcel & reply)435 int32_t StorageManagerStub::HandleGetSystemSize(MessageParcel &data, MessageParcel &reply)
436 {
437 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
438 return E_PERMISSION_DENIED;
439 }
440 int64_t systemSize;
441 int32_t err = GetSystemSize(systemSize);
442 if (!reply.WriteInt32(err)) {
443 return E_WRITE_REPLY_ERR;
444 }
445 if (!reply.WriteInt64(systemSize)) {
446 LOGE("StorageManagerStub::HandleGetFree call GetSystemSize failed");
447 return E_WRITE_REPLY_ERR;
448 }
449 return E_OK;
450 }
451
HandleGetTotalSize(MessageParcel & data,MessageParcel & reply)452 int32_t StorageManagerStub::HandleGetTotalSize(MessageParcel &data, MessageParcel &reply)
453 {
454 int64_t totalSize;
455 int32_t err = GetTotalSize(totalSize);
456 if (!reply.WriteInt32(err)) {
457 return E_WRITE_REPLY_ERR;
458 }
459 if (!reply.WriteInt64(totalSize)) {
460 LOGE("StorageManagerStub::HandleGetFree call GetTotalSize failed");
461 return E_WRITE_REPLY_ERR;
462 }
463 return E_OK;
464 }
465
HandleGetFreeSize(MessageParcel & data,MessageParcel & reply)466 int32_t StorageManagerStub::HandleGetFreeSize(MessageParcel &data, MessageParcel &reply)
467 {
468 int64_t freeSize;
469 int32_t err = GetFreeSize(freeSize);
470 if (!reply.WriteInt32(err)) {
471 return E_WRITE_REPLY_ERR;
472 }
473 if (!reply.WriteInt64(freeSize)) {
474 LOGE("StorageManagerStub::HandleGetFree call GetFreeSize failed");
475 return E_WRITE_REPLY_ERR;
476 }
477 return E_OK;
478 }
479
HandleGetCurrUserStorageStats(MessageParcel & data,MessageParcel & reply)480 int32_t StorageManagerStub::HandleGetCurrUserStorageStats(MessageParcel &data, MessageParcel &reply)
481 {
482 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
483 return E_PERMISSION_DENIED;
484 }
485 StorageStats storageStats;
486 int32_t err = GetUserStorageStats(storageStats);
487 if (!reply.WriteInt32(err)) {
488 return E_WRITE_REPLY_ERR;
489 }
490 if (!storageStats.Marshalling(reply)) {
491 return E_WRITE_REPLY_ERR;
492 }
493 return E_OK;
494 }
495
HandleGetUserStorageStats(MessageParcel & data,MessageParcel & reply)496 int32_t StorageManagerStub::HandleGetUserStorageStats(MessageParcel &data, MessageParcel &reply)
497 {
498 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
499 return E_PERMISSION_DENIED;
500 }
501 int32_t userId = data.ReadInt32();
502 StorageStats storageStats;
503 int32_t err = GetUserStorageStats(userId, storageStats);
504 if (!reply.WriteInt32(err)) {
505 return E_WRITE_REPLY_ERR;
506 }
507 if (!storageStats.Marshalling(reply)) {
508 return E_WRITE_REPLY_ERR;
509 }
510 return E_OK;
511 }
512
HandleGetCurrentBundleStats(MessageParcel & data,MessageParcel & reply)513 int32_t StorageManagerStub::HandleGetCurrentBundleStats(MessageParcel &data, MessageParcel &reply)
514 {
515 BundleStats bundleStats;
516 uint32_t statFlag = data.ReadUint32();
517 int32_t err = GetCurrentBundleStats(bundleStats, statFlag);
518 if (!reply.WriteInt32(err)) {
519 return E_WRITE_REPLY_ERR;
520 }
521 if (!bundleStats.Marshalling(reply)) {
522 return E_WRITE_REPLY_ERR;
523 }
524 return E_OK;
525 }
526
HandleGetAllVolumes(MessageParcel & data,MessageParcel & reply)527 int32_t StorageManagerStub::HandleGetAllVolumes(MessageParcel &data, MessageParcel &reply)
528 {
529 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
530 return E_PERMISSION_DENIED;
531 }
532 std::vector<VolumeExternal> ve;
533 int32_t err = GetAllVolumes(ve);
534 if (!reply.WriteInt32(err)) {
535 return E_WRITE_REPLY_ERR;
536 }
537 uint size = ve.size();
538 if (size == 0) {
539 LOGE("StorageManagerStub::No volume.");
540 if (!reply.WriteUint32(0)) {
541 return E_WRITE_REPLY_ERR;
542 }
543 return E_OK;
544 }
545 if (!reply.WriteUint32(ve.size())) {
546 return E_WRITE_REPLY_ERR;
547 }
548 for (uint i = 0; i < size; i++) {
549 if (!ve[i].Marshalling(reply)) {
550 return E_WRITE_REPLY_ERR;
551 }
552 }
553 return E_OK;
554 }
555
HandleNotifyVolumeCreated(MessageParcel & data,MessageParcel & reply)556 int32_t StorageManagerStub::HandleNotifyVolumeCreated(MessageParcel &data, MessageParcel &reply)
557 {
558 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
559 return E_PERMISSION_DENIED;
560 }
561 std::unique_ptr<VolumeCore> vc = VolumeCore::Unmarshalling(data);
562 NotifyVolumeCreated(*vc);
563 LOGI("StorageManagerStub::HandleNotifyVolumeCreated");
564 return E_OK;
565 }
566
HandleNotifyVolumeMounted(MessageParcel & data,MessageParcel & reply)567 int32_t StorageManagerStub::HandleNotifyVolumeMounted(MessageParcel &data, MessageParcel &reply)
568 {
569 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
570 return E_PERMISSION_DENIED;
571 }
572 std::string volumeId = data.ReadString();
573 int32_t fsType = data.ReadInt32();
574 std::string fsUuid = data.ReadString();
575 std::string path = data.ReadString();
576 std::string description = data.ReadString();
577 NotifyVolumeMounted(volumeId, fsType, fsUuid, path, description);
578 LOGI("StorageManagerStub::HandleNotifyVolumeMounted");
579 return E_OK;
580 }
581
HandleNotifyVolumeStateChanged(MessageParcel & data,MessageParcel & reply)582 int32_t StorageManagerStub::HandleNotifyVolumeStateChanged(MessageParcel &data, MessageParcel &reply)
583 {
584 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
585 return E_PERMISSION_DENIED;
586 }
587 std::string volumeId = data.ReadString();
588 VolumeState state = VolumeState(data.ReadInt32());
589 NotifyVolumeStateChanged(volumeId, state);
590 LOGI("StorageManagerStub::HandleNotifyVolumeStateChanged");
591 return E_OK;
592 }
593
HandleMount(MessageParcel & data,MessageParcel & reply)594 int32_t StorageManagerStub::HandleMount(MessageParcel &data, MessageParcel &reply)
595 {
596 if (!CheckClientPermission(PERMISSION_MOUNT_MANAGER)) {
597 return E_PERMISSION_DENIED;
598 }
599 std::string volumeId = data.ReadString();
600 int err = Mount(volumeId);
601 if (!reply.WriteUint32(err)) {
602 LOGE("StorageManagerStub::HandleMount call Mount failed");
603 return E_WRITE_REPLY_ERR;
604 }
605 return E_OK;
606 }
607
HandleUnmount(MessageParcel & data,MessageParcel & reply)608 int32_t StorageManagerStub::HandleUnmount(MessageParcel &data, MessageParcel &reply)
609 {
610 if (!CheckClientPermission(PERMISSION_MOUNT_MANAGER)) {
611 return E_PERMISSION_DENIED;
612 }
613 std::string volumeId = data.ReadString();
614 int err = Unmount(volumeId);
615 if (!reply.WriteUint32(err)) {
616 LOGE("StorageManagerStub::HandleUnmount call Mount failed");
617 return E_WRITE_REPLY_ERR;
618 }
619 return E_OK;
620 }
621
HandleNotifyDiskCreated(MessageParcel & data,MessageParcel & reply)622 int32_t StorageManagerStub::HandleNotifyDiskCreated(MessageParcel &data, MessageParcel &reply)
623 {
624 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
625 return E_PERMISSION_DENIED;
626 }
627 auto disk = Disk::Unmarshalling(data);
628 NotifyDiskCreated(*disk);
629 return E_OK;
630 }
631
HandleNotifyDiskDestroyed(MessageParcel & data,MessageParcel & reply)632 int32_t StorageManagerStub::HandleNotifyDiskDestroyed(MessageParcel &data, MessageParcel &reply)
633 {
634 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
635 return E_PERMISSION_DENIED;
636 }
637 std::string diskId = data.ReadString();
638 NotifyDiskDestroyed(diskId);
639 return E_OK;
640 }
641
HandlePartition(MessageParcel & data,MessageParcel & reply)642 int32_t StorageManagerStub::HandlePartition(MessageParcel &data, MessageParcel &reply)
643 {
644 if (!CheckClientPermission(PERMISSION_FORMAT_MANAGER)) {
645 return E_PERMISSION_DENIED;
646 }
647 std::string diskId = data.ReadString();
648 int32_t type = data.ReadInt32();
649 int err = Partition(diskId, type);
650 if (!reply.WriteUint32(err)) {
651 LOGE("StorageManagerStub::HandlePartition call Partition failed");
652 return E_WRITE_REPLY_ERR;
653 }
654 return E_OK;
655 }
656
HandleGetAllDisks(MessageParcel & data,MessageParcel & reply)657 int32_t StorageManagerStub::HandleGetAllDisks(MessageParcel &data, MessageParcel &reply)
658 {
659 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
660 return E_PERMISSION_DENIED;
661 }
662 std::vector<Disk> disks;
663 int32_t err = GetAllDisks(disks);
664 if (!reply.WriteUint32(err)) {
665 return E_WRITE_REPLY_ERR;
666 }
667 uint size = disks.size();
668 if (size == 0) {
669 LOGE("StorageManagerStub::No Disk.");
670 if (!reply.WriteUint32(0)) {
671 return E_WRITE_REPLY_ERR;
672 }
673 return E_OK;
674 }
675 if (!reply.WriteUint32(disks.size())) {
676 return E_WRITE_REPLY_ERR;
677 }
678 for (uint i = 0; i < size; i++) {
679 if (!disks[i].Marshalling(reply)) {
680 return E_WRITE_REPLY_ERR;
681 }
682 }
683 return E_OK;
684 }
685
HandleGetVolumeByUuid(MessageParcel & data,MessageParcel & reply)686 int32_t StorageManagerStub::HandleGetVolumeByUuid(MessageParcel &data, MessageParcel &reply)
687 {
688 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
689 return E_PERMISSION_DENIED;
690 }
691 std::string fsUuid = data.ReadString();
692 VolumeExternal vc;
693 int err = GetVolumeByUuid(fsUuid, vc);
694 if (!vc.Marshalling(reply)) {
695 return E_WRITE_REPLY_ERR;
696 }
697 if (!reply.WriteUint32(err)) {
698 LOGE("StorageManagerStub::HandleGetVolumeByUuid call GetVolumeByUuid failed");
699 return E_WRITE_REPLY_ERR;
700 }
701 return E_OK;
702 }
703
HandleGetVolumeById(MessageParcel & data,MessageParcel & reply)704 int32_t StorageManagerStub::HandleGetVolumeById(MessageParcel &data, MessageParcel &reply)
705 {
706 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
707 return E_PERMISSION_DENIED;
708 }
709 std::string volId = data.ReadString();
710 VolumeExternal vc;
711 int err = GetVolumeById(volId, vc);
712 if (!vc.Marshalling(reply)) {
713 return E_WRITE_REPLY_ERR;
714 }
715 if (!reply.WriteUint32(err)) {
716 LOGE("StorageManagerStub::HandleGetVolumeById call GetVolumeById failed");
717 return E_WRITE_REPLY_ERR;
718 }
719 return E_OK;
720 }
721
HandleSetVolDesc(MessageParcel & data,MessageParcel & reply)722 int32_t StorageManagerStub::HandleSetVolDesc(MessageParcel &data, MessageParcel &reply)
723 {
724 if (!CheckClientPermission(PERMISSION_MOUNT_MANAGER)) {
725 return E_PERMISSION_DENIED;
726 }
727 std::string fsUuid = data.ReadString();
728 std::string desc = data.ReadString();
729 int err = SetVolumeDescription(fsUuid, desc);
730 if (!reply.WriteUint32(err)) {
731 LOGE("StorageManagerStub::HandleSetVolDesc call SetVolumeDescription failed");
732 return E_WRITE_REPLY_ERR;
733 }
734 return E_OK;
735 }
736
HandleFormat(MessageParcel & data,MessageParcel & reply)737 int32_t StorageManagerStub::HandleFormat(MessageParcel &data, MessageParcel &reply)
738 {
739 if (!CheckClientPermission(PERMISSION_FORMAT_MANAGER)) {
740 return E_PERMISSION_DENIED;
741 }
742 std::string volId = data.ReadString();
743 std::string fsType = data.ReadString();
744 int err = Format(volId, fsType);
745 if (!reply.WriteUint32(err)) {
746 LOGE("StorageManagerStub::HandleFormat call Format failed");
747 return E_WRITE_REPLY_ERR;
748 }
749 return E_OK;
750 }
751
HandleGetDiskById(MessageParcel & data,MessageParcel & reply)752 int32_t StorageManagerStub::HandleGetDiskById(MessageParcel &data, MessageParcel &reply)
753 {
754 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
755 return E_PERMISSION_DENIED;
756 }
757 std::string volId = data.ReadString();
758 Disk disk;
759 int err = GetDiskById(volId, disk);
760 if (!disk.Marshalling(reply)) {
761 return E_WRITE_REPLY_ERR;
762 }
763 if (!reply.WriteUint32(err)) {
764 LOGE("StorageManagerStub::HandleGetDiskById call GetDiskById failed");
765 return E_WRITE_REPLY_ERR;
766 }
767 return E_OK;
768 }
769
HandleGenerateUserKeys(MessageParcel & data,MessageParcel & reply)770 int32_t StorageManagerStub::HandleGenerateUserKeys(MessageParcel &data, MessageParcel &reply)
771 {
772 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
773 return E_PERMISSION_DENIED;
774 }
775 uint32_t userId = data.ReadUint32();
776 uint32_t flags = data.ReadUint32();
777 int32_t err = GenerateUserKeys(userId, flags);
778 if (!reply.WriteInt32(err)) {
779 LOGE("Write reply error code failed");
780 return E_WRITE_REPLY_ERR;
781 }
782
783 return E_OK;
784 }
785
HandleDeleteUserKeys(MessageParcel & data,MessageParcel & reply)786 int32_t StorageManagerStub::HandleDeleteUserKeys(MessageParcel &data, MessageParcel &reply)
787 {
788 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
789 return E_PERMISSION_DENIED;
790 }
791 uint32_t userId = data.ReadUint32();
792 int32_t err = DeleteUserKeys(userId);
793 if (!reply.WriteInt32(err)) {
794 LOGE("Write reply error code failed");
795 return E_WRITE_REPLY_ERR;
796 }
797
798 return E_OK;
799 }
800
HandleUpdateUserAuth(MessageParcel & data,MessageParcel & reply)801 int32_t StorageManagerStub::HandleUpdateUserAuth(MessageParcel &data, MessageParcel &reply)
802 {
803 if (!CheckClientPermissionForCrypt(PERMISSION_STORAGE_MANAGER_CRYPT)) {
804 return E_PERMISSION_DENIED;
805 }
806 uint32_t userId = data.ReadUint32();
807 uint64_t secureUid = data.ReadUint64();
808
809 std::vector<uint8_t> token;
810 std::vector<uint8_t> oldSecret;
811 std::vector<uint8_t> newSecret;
812 data.ReadUInt8Vector(&token);
813 data.ReadUInt8Vector(&oldSecret);
814 data.ReadUInt8Vector(&newSecret);
815
816 int32_t err = UpdateUserAuth(userId, secureUid, token, oldSecret, newSecret);
817 if (!reply.WriteInt32(err)) {
818 LOGE("Write reply error code failed");
819 return E_WRITE_REPLY_ERR;
820 }
821 return E_OK;
822 }
823
HandleActiveUserKey(MessageParcel & data,MessageParcel & reply)824 int32_t StorageManagerStub::HandleActiveUserKey(MessageParcel &data, MessageParcel &reply)
825 {
826 if (!CheckClientPermissionForCrypt(PERMISSION_STORAGE_MANAGER_CRYPT) &&
827 IPCSkeleton::GetCallingUid() != ACCOUNT_UID) {
828 return E_PERMISSION_DENIED;
829 }
830 uint32_t userId = data.ReadUint32();
831
832 std::vector<uint8_t> token;
833 std::vector<uint8_t> secret;
834 data.ReadUInt8Vector(&token);
835 data.ReadUInt8Vector(&secret);
836
837 int32_t err = ActiveUserKey(userId, token, secret);
838 if (!reply.WriteInt32(err)) {
839 LOGE("Write reply error code failed");
840 return E_WRITE_REPLY_ERR;
841 }
842 return E_OK;
843 }
844
HandleInactiveUserKey(MessageParcel & data,MessageParcel & reply)845 int32_t StorageManagerStub::HandleInactiveUserKey(MessageParcel &data, MessageParcel &reply)
846 {
847 if (!CheckClientPermissionForCrypt(PERMISSION_STORAGE_MANAGER_CRYPT)) {
848 return E_PERMISSION_DENIED;
849 }
850 uint32_t userId = data.ReadUint32();
851 int32_t err = InactiveUserKey(userId);
852 if (!reply.WriteInt32(err)) {
853 LOGE("Write reply error code failed");
854 return E_WRITE_REPLY_ERR;
855 }
856 return E_OK;
857 }
858
HandleLockUserScreen(MessageParcel & data,MessageParcel & reply)859 int32_t StorageManagerStub::HandleLockUserScreen(MessageParcel &data, MessageParcel &reply)
860 {
861 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER_CRYPT)) {
862 return E_PERMISSION_DENIED;
863 }
864 uint32_t userId = data.ReadUint32();
865 int32_t err = LockUserScreen(userId);
866 if (!reply.WriteInt32(err)) {
867 LOGE("Write reply error code failed");
868 return E_WRITE_REPLY_ERR;
869 }
870
871 return E_OK;
872 }
873
HandleGetFileEncryptStatus(MessageParcel & data,MessageParcel & reply)874 int32_t StorageManagerStub::HandleGetFileEncryptStatus(MessageParcel &data, MessageParcel &reply)
875 {
876 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
877 return E_PERMISSION_DENIED;
878 }
879 bool isEncrypted = true;
880 uint32_t userId = data.ReadUint32();
881 bool needCheckDirMount = data.ReadBool();
882 int32_t err = GetFileEncryptStatus(userId, isEncrypted, needCheckDirMount);
883 if (!reply.WriteInt32(err)) {
884 LOGE("Write reply error code failed");
885 return E_WRITE_REPLY_ERR;
886 }
887 if (!reply.WriteBool(isEncrypted)) {
888 LOGE("Write reply isEncrypted failed");
889 return E_WRITE_REPLY_ERR;
890 }
891 return E_OK;
892 }
893
HandleGetUserNeedActiveStatus(MessageParcel & data,MessageParcel & reply)894 int32_t StorageManagerStub::HandleGetUserNeedActiveStatus(MessageParcel &data, MessageParcel &reply)
895 {
896 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
897 return E_PERMISSION_DENIED;
898 }
899 bool needActive = false;
900 uint32_t userId = data.ReadUint32();
901 int32_t err = GetUserNeedActiveStatus(userId, needActive);
902 if (!reply.WriteInt32(err)) {
903 LOGE("Write reply error code failed");
904 return E_WRITE_REPLY_ERR;
905 }
906 if (!reply.WriteBool(needActive)) {
907 LOGE("Write needActive failed");
908 return E_WRITE_REPLY_ERR;
909 }
910 return E_OK;
911 }
912
HandleUnlockUserScreen(MessageParcel & data,MessageParcel & reply)913 int32_t StorageManagerStub::HandleUnlockUserScreen(MessageParcel &data, MessageParcel &reply)
914 {
915 if (!CheckClientPermissionForCrypt(PERMISSION_STORAGE_MANAGER_CRYPT)) {
916 return E_PERMISSION_DENIED;
917 }
918 uint32_t userId = data.ReadUint32();
919
920 std::vector<uint8_t> token;
921 std::vector<uint8_t> secret;
922 data.ReadUInt8Vector(&token);
923 data.ReadUInt8Vector(&secret);
924
925 int32_t err = UnlockUserScreen(userId, token, secret);
926 if (!reply.WriteInt32(err)) {
927 LOGE("Write reply error code failed");
928 return E_WRITE_REPLY_ERR;
929 }
930 return E_OK;
931 }
932
HandleGetLockScreenStatus(MessageParcel & data,MessageParcel & reply)933 int32_t StorageManagerStub::HandleGetLockScreenStatus(MessageParcel &data, MessageParcel &reply)
934 {
935 if (!CheckClientPermissionForCrypt(PERMISSION_STORAGE_MANAGER)) {
936 return E_PERMISSION_DENIED;
937 }
938 uint32_t userId = data.ReadUint32();
939 bool lockScreenStatus = false;
940 int32_t err = GetLockScreenStatus(userId, lockScreenStatus);
941 if (!reply.WriteBool(lockScreenStatus)) {
942 LOGE("Write reply lockScreenStatus failed");
943 return E_WRITE_REPLY_ERR;
944 }
945 if (!reply.WriteInt32(err)) {
946 LOGE("Write reply error code failed");
947 return E_WRITE_REPLY_ERR;
948 }
949 return E_OK;
950 }
951
HandleGenerateAppkey(MessageParcel & data,MessageParcel & reply)952 int32_t StorageManagerStub::HandleGenerateAppkey(MessageParcel &data, MessageParcel &reply)
953 {
954 if (!CheckClientPermissionForCrypt(PERMISSION_STORAGE_MANAGER_CRYPT)) {
955 return E_PERMISSION_DENIED;
956 }
957 uint32_t hashId = data.ReadUint32();
958 uint32_t userId = data.ReadUint32();
959 std::string keyId;
960 int32_t err = GenerateAppkey(hashId, userId, keyId);
961 if (!reply.WriteString(keyId)) {
962 LOGE("Write reply lockScreenStatus failed");
963 return E_WRITE_REPLY_ERR;
964 }
965 if (!reply.WriteInt32(err)) {
966 LOGE("Write reply error code failed");
967 return E_WRITE_REPLY_ERR;
968 }
969 return E_OK;
970 }
971
HandleDeleteAppkey(MessageParcel & data,MessageParcel & reply)972 int32_t StorageManagerStub::HandleDeleteAppkey(MessageParcel &data, MessageParcel &reply)
973 {
974 if (!CheckClientPermissionForCrypt(PERMISSION_STORAGE_MANAGER_CRYPT)) {
975 return E_PERMISSION_DENIED;
976 }
977 std::string keyId = data.ReadString();
978 int32_t err = DeleteAppkey(keyId);
979 if (!reply.WriteInt32(err)) {
980 LOGE("Write reply error code failed");
981 return E_WRITE_REPLY_ERR;
982 }
983 return E_OK;
984 }
985
HandleUpdateKeyContext(MessageParcel & data,MessageParcel & reply)986 int32_t StorageManagerStub::HandleUpdateKeyContext(MessageParcel &data, MessageParcel &reply)
987 {
988 if (!CheckClientPermissionForCrypt(PERMISSION_STORAGE_MANAGER_CRYPT)) {
989 return E_PERMISSION_DENIED;
990 }
991 uint32_t userId = data.ReadUint32();
992 int32_t err = UpdateKeyContext(userId);
993 if (!reply.WriteInt32(err)) {
994 LOGE("Write reply error code failed");
995 return E_WRITE_REPLY_ERR;
996 }
997 return E_OK;
998 }
999
HandleCreateShareFile(MessageParcel & data,MessageParcel & reply)1000 int32_t StorageManagerStub::HandleCreateShareFile(MessageParcel &data, MessageParcel &reply)
1001 {
1002 if (!CheckClientPermissionForShareFile()) {
1003 return E_PERMISSION_DENIED;
1004 }
1005
1006 std::vector<std::string> uriList;
1007 if (!data.ReadStringVector(&uriList)) {
1008 return E_WRITE_REPLY_ERR;
1009 }
1010 uint32_t tokenId = data.ReadUint32();
1011 uint32_t flag = data.ReadUint32();
1012 std::vector<int32_t> retList = CreateShareFile(uriList, tokenId, flag);
1013 if (!reply.WriteInt32Vector(retList)) {
1014 return E_WRITE_REPLY_ERR;
1015 }
1016 return E_OK;
1017 }
1018
HandleDeleteShareFile(MessageParcel & data,MessageParcel & reply)1019 int32_t StorageManagerStub::HandleDeleteShareFile(MessageParcel &data, MessageParcel &reply)
1020 {
1021 if (!CheckClientPermissionForShareFile()) {
1022 return E_PERMISSION_DENIED;
1023 }
1024
1025 uint32_t tokenId = data.ReadUint32();
1026 std::vector<std::string> uriList;
1027 if (!data.ReadStringVector(&uriList)) {
1028 return E_WRITE_REPLY_ERR;
1029 }
1030
1031 int err = DeleteShareFile(tokenId, uriList);
1032 if (!reply.WriteInt32(err)) {
1033 return E_WRITE_REPLY_ERR;
1034 }
1035 return E_OK;
1036 }
1037
HandleSetBundleQuota(MessageParcel & data,MessageParcel & reply)1038 int32_t StorageManagerStub::HandleSetBundleQuota(MessageParcel &data, MessageParcel &reply)
1039 {
1040 if (!CheckClientPermission(PERMISSION_STORAGE_MANAGER)) {
1041 return E_PERMISSION_DENIED;
1042 }
1043
1044 std::string bundleName = data.ReadString();
1045 int32_t uid = data.ReadInt32();
1046 std::string bundleDataDirPath = data.ReadString();
1047 int32_t limitSizeMb = data.ReadInt32();
1048 int err = SetBundleQuota(bundleName, uid, bundleDataDirPath, limitSizeMb);
1049 if (!reply.WriteInt32(err)) {
1050 return E_WRITE_REPLY_ERR;
1051 }
1052 return E_OK;
1053 }
1054
HandleGetBundleStatsForIncrease(MessageParcel & data,MessageParcel & reply)1055 int32_t StorageManagerStub::HandleGetBundleStatsForIncrease(MessageParcel &data, MessageParcel &reply)
1056 {
1057 if (IPCSkeleton::GetCallingUid() != BACKUP_SA_UID) {
1058 LOGE("StorageManager permissionCheck error, calling uid is invalid, need backup_sa uid.");
1059 return E_PERMISSION_DENIED;
1060 }
1061
1062 uint32_t userId = data.ReadUint32();
1063 std::vector<std::string> bundleNames;
1064 if (!data.ReadStringVector(&bundleNames)) {
1065 return E_WRITE_REPLY_ERR;
1066 }
1067 std::vector<int64_t> incrementalBackTimes;
1068 if (!data.ReadInt64Vector(&incrementalBackTimes)) {
1069 return E_WRITE_REPLY_ERR;
1070 }
1071
1072 std::vector<int64_t> pkgFileSizes;
1073 std::vector<int64_t> incPkgFileSizes;
1074 int32_t err = GetBundleStatsForIncrease(userId, bundleNames, incrementalBackTimes, pkgFileSizes, incPkgFileSizes);
1075 if (!reply.WriteUint32(err)) {
1076 return E_WRITE_REPLY_ERR;
1077 }
1078 if (!reply.WriteInt64Vector(pkgFileSizes)) {
1079 LOGE("StorageManagerStub::HandleGetBundleStatsForIncrease call GetBundleStatsForIncrease failed");
1080 return E_WRITE_REPLY_ERR;
1081 }
1082 if (!reply.WriteInt64Vector(incPkgFileSizes)) {
1083 LOGE("StorageManagerStub::HandleGetBundleStatsForIncrease call GetBundleStatsForIncrease failed");
1084 return E_WRITE_REPLY_ERR;
1085 }
1086 return E_OK;
1087 }
1088
1089
HandleGetUserStorageStatsByType(MessageParcel & data,MessageParcel & reply)1090 int32_t StorageManagerStub::HandleGetUserStorageStatsByType(MessageParcel &data, MessageParcel &reply)
1091 {
1092 if (IPCSkeleton::GetCallingUid() != BACKUP_SA_UID) {
1093 LOGE("StorageManager permissionCheck error, calling uid is invalid, need backup_sa uid.");
1094 return E_PERMISSION_DENIED;
1095 }
1096
1097 int32_t userId = data.ReadInt32();
1098 std::string type = data.ReadString();
1099 StorageStats storageStats;
1100 int32_t err = GetUserStorageStatsByType(userId, storageStats, type);
1101 if (!reply.WriteInt32(err)) {
1102 return E_WRITE_REPLY_ERR;
1103 }
1104 if (!storageStats.Marshalling(reply)) {
1105 return E_WRITE_REPLY_ERR;
1106 }
1107 return E_OK;
1108 }
1109
HandleUpdateMemoryPara(MessageParcel & data,MessageParcel & reply)1110 int32_t StorageManagerStub::HandleUpdateMemoryPara(MessageParcel &data, MessageParcel &reply)
1111 {
1112 if (IPCSkeleton::GetCallingUid() != BACKUP_SA_UID) {
1113 LOGE("StorageManager permissionCheck error, calling uid is invalid, need backup_sa uid.");
1114 return E_PERMISSION_DENIED;
1115 }
1116
1117 int32_t size = data.ReadInt32();
1118 int32_t oldSize = 0;
1119 int err = UpdateMemoryPara(size, oldSize);
1120 if (!reply.WriteInt32(err)) {
1121 return E_WRITE_REPLY_ERR;
1122 }
1123 if (!reply.WriteInt32(oldSize)) {
1124 LOGE("StorageManagerStub::HandleUpdateMemoryPara call UpdateMemoryPara failed");
1125 return E_WRITE_REPLY_ERR;
1126 }
1127 return E_OK;
1128 }
1129
HandleMountDfsDocs(MessageParcel & data,MessageParcel & reply)1130 int32_t StorageManagerStub::HandleMountDfsDocs(MessageParcel &data, MessageParcel &reply)
1131 {
1132 // Only for dfs create device dir and bind mount from DFS Docs.
1133 if (IPCSkeleton::GetCallingUid() != DFS_UID) {
1134 LOGE("HandleMountDfsDocs permissionCheck error, calling uid now is %{public}d, should be DFS_UID: %{public}d",
1135 IPCSkeleton::GetCallingUid(), DFS_UID);
1136 return E_PERMISSION_DENIED;
1137 }
1138
1139 int32_t userId = data.ReadInt32();
1140 std::string relativePath = data.ReadString();
1141 std::string networkId = data.ReadString();
1142 std::string deviceId = data.ReadString();
1143
1144 int32_t err = MountDfsDocs(userId, relativePath, networkId, deviceId);
1145 if (!reply.WriteInt32(err)) {
1146 return E_WRITE_REPLY_ERR;
1147 }
1148 return E_OK;
1149 }
1150
HandleUMountDfsDocs(MessageParcel & data,MessageParcel & reply)1151 int32_t StorageManagerStub::HandleUMountDfsDocs(MessageParcel &data, MessageParcel &reply)
1152 {
1153 // Only for dfs create device dir and bind mount from DFS Docs.
1154 if (IPCSkeleton::GetCallingUid() != DFS_UID) {
1155 LOGE("HandleUMountDfsDocs permissionCheck error, calling uid now is %{public}d, should be DFS_UID: %{public}d",
1156 IPCSkeleton::GetCallingUid(), DFS_UID);
1157 return E_PERMISSION_DENIED;
1158 }
1159
1160 int32_t userId = data.ReadInt32();
1161 std::string relativePath = data.ReadString();
1162 std::string networkId = data.ReadString();
1163 std::string deviceId = data.ReadString();
1164 int32_t err = UMountDfsDocs(userId, relativePath, networkId, deviceId);
1165 if (!reply.WriteInt32(err)) {
1166 return E_WRITE_REPLY_ERR;
1167 }
1168 return E_OK;
1169 }
1170 } // StorageManager
1171 } // OHOS
1172