113acfde9Sopenharmony_ci/* 213acfde9Sopenharmony_ci * Copyright (C) 2021-2024 Huawei Device Co., Ltd. 313acfde9Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 413acfde9Sopenharmony_ci * you may not use this file except in compliance with the License. 513acfde9Sopenharmony_ci * You may obtain a copy of the License at 613acfde9Sopenharmony_ci * 713acfde9Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 813acfde9Sopenharmony_ci * 913acfde9Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1013acfde9Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1113acfde9Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1213acfde9Sopenharmony_ci * See the License for the specific language governing permissions and 1313acfde9Sopenharmony_ci * limitations under the License. 1413acfde9Sopenharmony_ci */ 1513acfde9Sopenharmony_ci 1613acfde9Sopenharmony_ci#include <functional> 1713acfde9Sopenharmony_ci#include <iostream> 1813acfde9Sopenharmony_ci#include <map> 1913acfde9Sopenharmony_ci#include <string> 2013acfde9Sopenharmony_ci#include <vector> 2113acfde9Sopenharmony_ci 2213acfde9Sopenharmony_ci#include "client/storage_manager_client.h" 2313acfde9Sopenharmony_ci#include "storage_daemon_client.h" 2413acfde9Sopenharmony_ci#include "storage_service_log.h" 2513acfde9Sopenharmony_ci#include "utils/file_utils.h" 2613acfde9Sopenharmony_ci 2713acfde9Sopenharmony_ciconstexpr int32_t ARG_CNT_2 = 2; 2813acfde9Sopenharmony_ciconstexpr size_t INDEX_1 = 1; 2913acfde9Sopenharmony_ciconstexpr size_t INDEX_2 = 2; 3013acfde9Sopenharmony_ci 3113acfde9Sopenharmony_ci#ifdef SDC_TEST_ENABLE 3213acfde9Sopenharmony_ciconstexpr int32_t ARG_CNT_4 = 4; 3313acfde9Sopenharmony_ciconstexpr int32_t ARG_CNT_5 = 5; 3413acfde9Sopenharmony_ciconstexpr int32_t ARG_CNT_6 = 6; 3513acfde9Sopenharmony_ciconstexpr size_t INDEX_3 = 3; 3613acfde9Sopenharmony_ciconstexpr size_t INDEX_4 = 4; 3713acfde9Sopenharmony_ciconstexpr size_t INDEX_5 = 5; 3813acfde9Sopenharmony_ci#endif 3913acfde9Sopenharmony_ci 4013acfde9Sopenharmony_cistatic int32_t InitGlobalKey(const std::vector<std::string> &args) 4113acfde9Sopenharmony_ci{ 4213acfde9Sopenharmony_ci (void)args; 4313acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::InitGlobalKey(); 4413acfde9Sopenharmony_ci} 4513acfde9Sopenharmony_ci 4613acfde9Sopenharmony_cistatic int32_t InitMainUser(const std::vector<std::string> &args) 4713acfde9Sopenharmony_ci{ 4813acfde9Sopenharmony_ci (void)args; 4913acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::InitGlobalUserKeys(); 5013acfde9Sopenharmony_ci} 5113acfde9Sopenharmony_ci 5213acfde9Sopenharmony_ci#ifdef SDC_TEST_ENABLE 5313acfde9Sopenharmony_cistatic int32_t GenerateUserKeys(const std::vector<std::string> &args) 5413acfde9Sopenharmony_ci{ 5513acfde9Sopenharmony_ci if (args.size() < ARG_CNT_5) { 5613acfde9Sopenharmony_ci LOGE("Parameter nums is less than 5, please retry"); 5713acfde9Sopenharmony_ci return -EINVAL; 5813acfde9Sopenharmony_ci } 5913acfde9Sopenharmony_ci uint32_t userId; 6013acfde9Sopenharmony_ci uint32_t flags; 6113acfde9Sopenharmony_ci // 3 means take the fourth argument of args, 4 means take the fifth argument of args 6213acfde9Sopenharmony_ci if ((OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) || 6313acfde9Sopenharmony_ci (OHOS::StorageDaemon::StringToUint32(args[INDEX_4], flags) == false)) { 6413acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 6513acfde9Sopenharmony_ci return -EINVAL; 6613acfde9Sopenharmony_ci } 6713acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::GenerateUserKeys(userId, flags); 6813acfde9Sopenharmony_ci} 6913acfde9Sopenharmony_ci 7013acfde9Sopenharmony_cistatic int32_t PrepareUserSpace(const std::vector<std::string> &args) 7113acfde9Sopenharmony_ci{ 7213acfde9Sopenharmony_ci if (args.size() < ARG_CNT_5) { 7313acfde9Sopenharmony_ci LOGE("Parameter nums is less than 5, please retry"); 7413acfde9Sopenharmony_ci return -EINVAL; 7513acfde9Sopenharmony_ci } 7613acfde9Sopenharmony_ci uint32_t userId; 7713acfde9Sopenharmony_ci uint32_t flags; 7813acfde9Sopenharmony_ci // 3 means take the fourth argument of args, 4 means take the fifth argument of args 7913acfde9Sopenharmony_ci if ((OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) || 8013acfde9Sopenharmony_ci (OHOS::StorageDaemon::StringToUint32(args[INDEX_4], flags) == false)) { 8113acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 8213acfde9Sopenharmony_ci return -EINVAL; 8313acfde9Sopenharmony_ci } 8413acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::PrepareUserDirs(userId, flags); 8513acfde9Sopenharmony_ci} 8613acfde9Sopenharmony_ci 8713acfde9Sopenharmony_cistatic int32_t DeleteUserKeys(const std::vector<std::string> &args) 8813acfde9Sopenharmony_ci{ 8913acfde9Sopenharmony_ci if (args.size() < ARG_CNT_4) { 9013acfde9Sopenharmony_ci LOGE("Parameter nums is less than 4, please retry"); 9113acfde9Sopenharmony_ci return -EINVAL; 9213acfde9Sopenharmony_ci } 9313acfde9Sopenharmony_ci uint32_t userId; 9413acfde9Sopenharmony_ci // 3 means take the fourth argument of args 9513acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) { 9613acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 9713acfde9Sopenharmony_ci return -EINVAL; 9813acfde9Sopenharmony_ci } 9913acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::DeleteUserKeys(userId); 10013acfde9Sopenharmony_ci} 10113acfde9Sopenharmony_ci 10213acfde9Sopenharmony_cistatic int32_t DestroyUserSpace(const std::vector<std::string> &args) 10313acfde9Sopenharmony_ci{ 10413acfde9Sopenharmony_ci if (args.size() < ARG_CNT_5) { 10513acfde9Sopenharmony_ci LOGE("Parameter nums is less than 5, please retry"); 10613acfde9Sopenharmony_ci return -EINVAL; 10713acfde9Sopenharmony_ci } 10813acfde9Sopenharmony_ci uint32_t userId; 10913acfde9Sopenharmony_ci uint32_t flags; 11013acfde9Sopenharmony_ci // 3 means take the fourth argument of args, 4 means take the fifth argument of args 11113acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false || 11213acfde9Sopenharmony_ci OHOS::StorageDaemon::StringToUint32(args[INDEX_4], flags) == false) { 11313acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 11413acfde9Sopenharmony_ci return -EINVAL; 11513acfde9Sopenharmony_ci } 11613acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::DestroyUserDirs(userId, flags); 11713acfde9Sopenharmony_ci} 11813acfde9Sopenharmony_ci 11913acfde9Sopenharmony_cistatic int32_t UpdateUserAuth(const std::vector<std::string> &args) 12013acfde9Sopenharmony_ci{ 12113acfde9Sopenharmony_ci if (args.size() < ARG_CNT_5) { 12213acfde9Sopenharmony_ci LOGE("Parameter nums is less than 5, please retry"); 12313acfde9Sopenharmony_ci return -EINVAL; 12413acfde9Sopenharmony_ci } 12513acfde9Sopenharmony_ci uint32_t userId; 12613acfde9Sopenharmony_ci // 3 means take the fourth argument of args 12713acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) { 12813acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 12913acfde9Sopenharmony_ci return -EINVAL; 13013acfde9Sopenharmony_ci } 13113acfde9Sopenharmony_ci 13213acfde9Sopenharmony_ci // 4 means take the fifth argument of args, 5 means take the sixth argument of args 13313acfde9Sopenharmony_ci if (args.size() == ARG_CNT_6) { 13413acfde9Sopenharmony_ci std::vector<uint8_t> oldSecret(args[INDEX_4].begin(), args[INDEX_4].end()); 13513acfde9Sopenharmony_ci std::vector<uint8_t> newSecret(args[INDEX_5].begin(), args[INDEX_5].end()); 13613acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::UpdateUserAuth(userId, 0, {}, oldSecret, newSecret); 13713acfde9Sopenharmony_ci } 13813acfde9Sopenharmony_ci std::vector<uint8_t> newSecret(args[INDEX_4].begin(), args[INDEX_4].end()); 13913acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::UpdateUserAuth(userId, 0, {}, {}, newSecret); 14013acfde9Sopenharmony_ci} 14113acfde9Sopenharmony_ci 14213acfde9Sopenharmony_cistatic int32_t ActiveUserKey(const std::vector<std::string> &args) 14313acfde9Sopenharmony_ci{ 14413acfde9Sopenharmony_ci if (args.size() < ARG_CNT_4) { 14513acfde9Sopenharmony_ci LOGE("Parameter nums is less than 4, please retry"); 14613acfde9Sopenharmony_ci return -EINVAL; 14713acfde9Sopenharmony_ci } 14813acfde9Sopenharmony_ci uint32_t userId; 14913acfde9Sopenharmony_ci // 3 means take the fourth argument of args 15013acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) { 15113acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 15213acfde9Sopenharmony_ci return -EINVAL; 15313acfde9Sopenharmony_ci } 15413acfde9Sopenharmony_ci // 4 means take the fifth argument of args 15513acfde9Sopenharmony_ci if (args.size() == ARG_CNT_5) { 15613acfde9Sopenharmony_ci std::vector<uint8_t> secret(args[INDEX_4].begin(), args[INDEX_4].end()); 15713acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::ActiveUserKey(userId, {}, secret); 15813acfde9Sopenharmony_ci } 15913acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::ActiveUserKey(userId, {}, {}); 16013acfde9Sopenharmony_ci} 16113acfde9Sopenharmony_ci 16213acfde9Sopenharmony_cistatic int32_t InactiveUserKey(const std::vector<std::string> &args) 16313acfde9Sopenharmony_ci{ 16413acfde9Sopenharmony_ci if (args.size() < ARG_CNT_4) { 16513acfde9Sopenharmony_ci LOGE("Parameter nums is less than 4, please retry"); 16613acfde9Sopenharmony_ci return -EINVAL; 16713acfde9Sopenharmony_ci } 16813acfde9Sopenharmony_ci uint32_t userId; 16913acfde9Sopenharmony_ci // 3 means take the fourth argument of args 17013acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) { 17113acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 17213acfde9Sopenharmony_ci return -EINVAL; 17313acfde9Sopenharmony_ci } 17413acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::InactiveUserKey(userId); 17513acfde9Sopenharmony_ci} 17613acfde9Sopenharmony_ci 17713acfde9Sopenharmony_cistatic int32_t LockUserScreen(const std::vector<std::string> &args) 17813acfde9Sopenharmony_ci{ 17913acfde9Sopenharmony_ci if (args.size() < ARG_CNT_4) { 18013acfde9Sopenharmony_ci LOGE("Parameter nums is less than 4, please retry"); 18113acfde9Sopenharmony_ci return -EINVAL; 18213acfde9Sopenharmony_ci } 18313acfde9Sopenharmony_ci uint32_t userId; 18413acfde9Sopenharmony_ci // 3 means take the fourth argument of args 18513acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) { 18613acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 18713acfde9Sopenharmony_ci return -EINVAL; 18813acfde9Sopenharmony_ci } 18913acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::LockUserScreen(userId); 19013acfde9Sopenharmony_ci} 19113acfde9Sopenharmony_ci 19213acfde9Sopenharmony_cistatic int32_t UnlockUserScreen(const std::vector<std::string> &args) 19313acfde9Sopenharmony_ci{ 19413acfde9Sopenharmony_ci if (args.size() < ARG_CNT_4) { 19513acfde9Sopenharmony_ci LOGE("Parameter nums is less than 4, please retry"); 19613acfde9Sopenharmony_ci return -EINVAL; 19713acfde9Sopenharmony_ci } 19813acfde9Sopenharmony_ci uint32_t userId; 19913acfde9Sopenharmony_ci // 3 means take the fourth argument of args 20013acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) { 20113acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 20213acfde9Sopenharmony_ci return -EINVAL; 20313acfde9Sopenharmony_ci } 20413acfde9Sopenharmony_ci // 4 means take the fifth argument of args 20513acfde9Sopenharmony_ci if (args.size() == ARG_CNT_5) { 20613acfde9Sopenharmony_ci std::vector<uint8_t> secret(args[INDEX_4].begin(), args[INDEX_4].end()); 20713acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::UnlockUserScreen(userId, {}, secret); 20813acfde9Sopenharmony_ci } 20913acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::UnlockUserScreen(userId, {}, {}); 21013acfde9Sopenharmony_ci} 21113acfde9Sopenharmony_ci 21213acfde9Sopenharmony_ciint32_t GetFileEncryptStatus(const std::vector<std::string> &args) 21313acfde9Sopenharmony_ci{ 21413acfde9Sopenharmony_ci if (args.size() < ARG_CNT_5) { 21513acfde9Sopenharmony_ci LOGE("Parameter nums is less than 4, please retry"); 21613acfde9Sopenharmony_ci return -EINVAL; 21713acfde9Sopenharmony_ci } 21813acfde9Sopenharmony_ci uint32_t userId; 21913acfde9Sopenharmony_ci // 3 means take the fourth argument of args 22013acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) { 22113acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 22213acfde9Sopenharmony_ci return -EINVAL; 22313acfde9Sopenharmony_ci } 22413acfde9Sopenharmony_ci uint32_t judge; 22513acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_4], judge) == false) { 22613acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 22713acfde9Sopenharmony_ci return -EINVAL; 22813acfde9Sopenharmony_ci } 22913acfde9Sopenharmony_ci bool isEncrypted = true; 23013acfde9Sopenharmony_ci bool judgeFlag = judge != 0; 23113acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::GetFileEncryptStatus(userId, isEncrypted, judgeFlag); 23213acfde9Sopenharmony_ci} 23313acfde9Sopenharmony_ci 23413acfde9Sopenharmony_cistatic int32_t EnableFscrypt(const std::vector<std::string> &args) 23513acfde9Sopenharmony_ci{ 23613acfde9Sopenharmony_ci if (args.size() < ARG_CNT_4) { 23713acfde9Sopenharmony_ci LOGE("Parameter nums is less than 4, please retry"); 23813acfde9Sopenharmony_ci return -EINVAL; 23913acfde9Sopenharmony_ci } 24013acfde9Sopenharmony_ci auto option = args[INDEX_3]; // cmd no.3 param is the option 24113acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::FscryptEnable(option); 24213acfde9Sopenharmony_ci} 24313acfde9Sopenharmony_ci 24413acfde9Sopenharmony_cistatic int32_t UpdateKeyContext(const std::vector<std::string> &args) 24513acfde9Sopenharmony_ci{ 24613acfde9Sopenharmony_ci if (args.size() < ARG_CNT_4) { 24713acfde9Sopenharmony_ci LOGE("Parameter nums is less than 4, please retry"); 24813acfde9Sopenharmony_ci return -EINVAL; 24913acfde9Sopenharmony_ci } 25013acfde9Sopenharmony_ci uint32_t userId; 25113acfde9Sopenharmony_ci // 3 means take the fourth argument of args 25213acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) { 25313acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 25413acfde9Sopenharmony_ci return -EINVAL; 25513acfde9Sopenharmony_ci } 25613acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::UpdateKeyContext(userId); 25713acfde9Sopenharmony_ci} 25813acfde9Sopenharmony_ci 25913acfde9Sopenharmony_cistatic int32_t GenerateAppkey(const std::vector<std::string> &args) 26013acfde9Sopenharmony_ci{ 26113acfde9Sopenharmony_ci if (args.size() < ARG_CNT_4) { 26213acfde9Sopenharmony_ci LOGE("Parameter nums is less than 4, please retry"); 26313acfde9Sopenharmony_ci return -EINVAL; 26413acfde9Sopenharmony_ci } 26513acfde9Sopenharmony_ci uint32_t userId; 26613acfde9Sopenharmony_ci // 3 means take the fourth argument of args 26713acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) { 26813acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 26913acfde9Sopenharmony_ci return -EINVAL; 27013acfde9Sopenharmony_ci } 27113acfde9Sopenharmony_ci uint32_t hashId = 0; 27213acfde9Sopenharmony_ci std::string keyId; 27313acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::GenerateAppkey(userId, hashId, keyId); 27413acfde9Sopenharmony_ci} 27513acfde9Sopenharmony_ci 27613acfde9Sopenharmony_cistatic int32_t DeleteAppkey(const std::vector<std::string> &args) 27713acfde9Sopenharmony_ci{ 27813acfde9Sopenharmony_ci if (args.size() < ARG_CNT_4) { 27913acfde9Sopenharmony_ci LOGE("Parameter nums is less than 4, please retry"); 28013acfde9Sopenharmony_ci return -EINVAL; 28113acfde9Sopenharmony_ci } 28213acfde9Sopenharmony_ci uint32_t userId; 28313acfde9Sopenharmony_ci // 3 means take the fourth argument of args 28413acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) { 28513acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 28613acfde9Sopenharmony_ci return -EINVAL; 28713acfde9Sopenharmony_ci } 28813acfde9Sopenharmony_ci std::string keyId = args[INDEX_4]; 28913acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::DeleteAppkey(userId, keyId); 29013acfde9Sopenharmony_ci} 29113acfde9Sopenharmony_ci 29213acfde9Sopenharmony_cistatic int32_t CreateRecoverKey(const std::vector<std::string> &args) 29313acfde9Sopenharmony_ci{ 29413acfde9Sopenharmony_ci if (args.size() < ARG_CNT_4) { 29513acfde9Sopenharmony_ci LOGE("Parameter nums is less than 4, please retry"); 29613acfde9Sopenharmony_ci return -EINVAL; 29713acfde9Sopenharmony_ci } 29813acfde9Sopenharmony_ci uint32_t userId; 29913acfde9Sopenharmony_ci uint32_t userType; 30013acfde9Sopenharmony_ci 30113acfde9Sopenharmony_ci if (!OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId)) { 30213acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 30313acfde9Sopenharmony_ci return -EINVAL; 30413acfde9Sopenharmony_ci } 30513acfde9Sopenharmony_ci if (!OHOS::StorageDaemon::StringToUint32(args[INDEX_4], userType)) { 30613acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 30713acfde9Sopenharmony_ci return -EINVAL; 30813acfde9Sopenharmony_ci } 30913acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::CreateRecoverKey(userId, userType, {}, {}); 31013acfde9Sopenharmony_ci} 31113acfde9Sopenharmony_ci 31213acfde9Sopenharmony_cistatic int32_t SetRecoverKey(const std::vector<std::string> &args) 31313acfde9Sopenharmony_ci{ 31413acfde9Sopenharmony_ci if (args.size() < ARG_CNT_4) { 31513acfde9Sopenharmony_ci LOGE("SetRecoverKey Parameter nums is less than 4, please retry"); 31613acfde9Sopenharmony_ci return -EINVAL; 31713acfde9Sopenharmony_ci } 31813acfde9Sopenharmony_ci 31913acfde9Sopenharmony_ci std::vector<uint8_t> key(args[INDEX_3].begin(), args[INDEX_3].end()); 32013acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::SetRecoverKey(key); 32113acfde9Sopenharmony_ci} 32213acfde9Sopenharmony_ci 32313acfde9Sopenharmony_cistatic int32_t StopUser(const std::vector<std::string> &args) 32413acfde9Sopenharmony_ci{ 32513acfde9Sopenharmony_ci if (args.size() < ARG_CNT_4) { 32613acfde9Sopenharmony_ci LOGE("Parameter nums is less than 4, please retry"); 32713acfde9Sopenharmony_ci return -EINVAL; 32813acfde9Sopenharmony_ci } 32913acfde9Sopenharmony_ci uint32_t userId; 33013acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) { 33113acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 33213acfde9Sopenharmony_ci return -EINVAL; 33313acfde9Sopenharmony_ci } 33413acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::StopUser(userId); 33513acfde9Sopenharmony_ci} 33613acfde9Sopenharmony_ci 33713acfde9Sopenharmony_cistatic int32_t StartUser(const std::vector<std::string> &args) 33813acfde9Sopenharmony_ci{ 33913acfde9Sopenharmony_ci if (args.size() < ARG_CNT_4) { 34013acfde9Sopenharmony_ci LOGE("Parameter nums is less than 4, please retry"); 34113acfde9Sopenharmony_ci return -EINVAL; 34213acfde9Sopenharmony_ci } 34313acfde9Sopenharmony_ci uint32_t userId; 34413acfde9Sopenharmony_ci if (OHOS::StorageDaemon::StringToUint32(args[INDEX_3], userId) == false) { 34513acfde9Sopenharmony_ci LOGE("Parameter input error, please retry"); 34613acfde9Sopenharmony_ci return -EINVAL; 34713acfde9Sopenharmony_ci } 34813acfde9Sopenharmony_ci return OHOS::StorageDaemon::StorageDaemonClient::StartUser(userId); 34913acfde9Sopenharmony_ci} 35013acfde9Sopenharmony_ci#endif 35113acfde9Sopenharmony_ci 35213acfde9Sopenharmony_cistatic const auto g_fscryptCmdHandler = std::map<std::string, 35313acfde9Sopenharmony_ci std::function<int32_t(const std::vector<std::string> &)>> { 35413acfde9Sopenharmony_ci {"init_global_key", InitGlobalKey}, 35513acfde9Sopenharmony_ci {"init_main_user", InitMainUser}, 35613acfde9Sopenharmony_ci#ifdef SDC_TEST_ENABLE 35713acfde9Sopenharmony_ci {"generate_user_keys", GenerateUserKeys}, 35813acfde9Sopenharmony_ci {"prepare_user_space", PrepareUserSpace}, 35913acfde9Sopenharmony_ci {"delete_user_keys", DeleteUserKeys}, 36013acfde9Sopenharmony_ci {"destroy_user_space", DestroyUserSpace}, 36113acfde9Sopenharmony_ci {"update_user_auth", UpdateUserAuth}, 36213acfde9Sopenharmony_ci {"active_user_key", ActiveUserKey}, 36313acfde9Sopenharmony_ci {"inactive_user_key", InactiveUserKey}, 36413acfde9Sopenharmony_ci {"enable", EnableFscrypt}, 36513acfde9Sopenharmony_ci {"update_key_context", UpdateKeyContext}, 36613acfde9Sopenharmony_ci {"lock_user_screen", LockUserScreen}, 36713acfde9Sopenharmony_ci {"unlock_user_screen", UnlockUserScreen}, 36813acfde9Sopenharmony_ci {"generate_app_key", GenerateAppkey}, 36913acfde9Sopenharmony_ci {"delete_app_key", DeleteAppkey}, 37013acfde9Sopenharmony_ci {"Get_unlock_status", GetFileEncryptStatus}, 37113acfde9Sopenharmony_ci {"create_recover_key", CreateRecoverKey}, 37213acfde9Sopenharmony_ci {"set_recover_key", SetRecoverKey}, 37313acfde9Sopenharmony_ci {"stop_user", StopUser}, 37413acfde9Sopenharmony_ci {"start_user", StartUser}, 37513acfde9Sopenharmony_ci#endif 37613acfde9Sopenharmony_ci}; 37713acfde9Sopenharmony_ci 37813acfde9Sopenharmony_cistatic int HandleFileCrypt(const std::string &cmd, const std::vector<std::string> &args) 37913acfde9Sopenharmony_ci{ 38013acfde9Sopenharmony_ci LOGI("fscrypt cmd: %{public}s", cmd.c_str()); 38113acfde9Sopenharmony_ci 38213acfde9Sopenharmony_ci auto handler = g_fscryptCmdHandler.find(cmd); 38313acfde9Sopenharmony_ci if (handler == g_fscryptCmdHandler.end()) { 38413acfde9Sopenharmony_ci LOGE("Unknown fscrypt cmd: %{public}s", cmd.c_str()); 38513acfde9Sopenharmony_ci return -EINVAL; 38613acfde9Sopenharmony_ci } 38713acfde9Sopenharmony_ci auto ret = handler->second(args); 38813acfde9Sopenharmony_ci if (ret != 0) { 38913acfde9Sopenharmony_ci LOGE("fscrypt cmd: %{public}s failed, ret: %{public}d", cmd.c_str(), ret); 39013acfde9Sopenharmony_ci } else { 39113acfde9Sopenharmony_ci LOGI("fscrypt cmd: %{public}s success", cmd.c_str()); 39213acfde9Sopenharmony_ci } 39313acfde9Sopenharmony_ci return ret; 39413acfde9Sopenharmony_ci} 39513acfde9Sopenharmony_ci 39613acfde9Sopenharmony_ciint main(int argc, char **argv) 39713acfde9Sopenharmony_ci{ 39813acfde9Sopenharmony_ci LOGI("sdc start"); 39913acfde9Sopenharmony_ci std::vector<std::string> args(argv, argv + argc); 40013acfde9Sopenharmony_ci 40113acfde9Sopenharmony_ci if (argc < ARG_CNT_2) { 40213acfde9Sopenharmony_ci LOGE("usage: sdc <subsystem> [cmd]"); 40313acfde9Sopenharmony_ci return 0; 40413acfde9Sopenharmony_ci } 40513acfde9Sopenharmony_ci 40613acfde9Sopenharmony_ci int ret = 0; 40713acfde9Sopenharmony_ci // no.1 param is the cmd 40813acfde9Sopenharmony_ci if (args[INDEX_1] == "filecrypt") { 40913acfde9Sopenharmony_ci ret = HandleFileCrypt(args[INDEX_2], args); // no.2 param is the cmd 41013acfde9Sopenharmony_ci } else { 41113acfde9Sopenharmony_ci LOGE("Unknown subsystem: %{public}s", args[INDEX_1].c_str()); // no.1 param is the cmd 41213acfde9Sopenharmony_ci ret = -EINVAL; 41313acfde9Sopenharmony_ci } 41413acfde9Sopenharmony_ci 41513acfde9Sopenharmony_ci LOGI("sdc end"); 41613acfde9Sopenharmony_ci std::cout << "ret: " << ret << std::endl; 41713acfde9Sopenharmony_ci return ret; 41813acfde9Sopenharmony_ci} 419