From caaa78e758e37761c5794b1dbaf1e065f0645836 Mon Sep 17 00:00:00 2001 From: Zheng Yongjun Date: Thu, 17 Feb 2022 17:29:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=87=E6=8D=A2=E6=B2=99=E7=AE=B1=E8=B7=AF?= =?UTF-8?q?=E5=BE=84:=20=E4=BB=8E/data/storage=E8=B7=AF=E5=BE=84=E5=88=B0?= =?UTF-8?q?=20/data/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Zheng Yongjun --- src/appspawn_server.cpp | 59 ++++++++++++++++++++++------------- src/include/appspawn_server.h | 8 ++++- 2 files changed, 44 insertions(+), 23 deletions(-) mode change 100644 => 100755 src/include/appspawn_server.h diff --git a/src/appspawn_server.cpp b/src/appspawn_server.cpp index e0a0a150..97081004 100755 --- a/src/appspawn_server.cpp +++ b/src/appspawn_server.cpp @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include #include #include @@ -121,6 +123,7 @@ AppSpawnServer::AppSpawnServer(const std::string &socketName) { socketName_ = socketName; socket_ = std::make_shared(socketName_); + sandboxFolderName_ = GetRandomFolderName(); isRunning_ = true; } @@ -417,9 +420,9 @@ int32_t AppSpawnServer::DoAppSandboxMount(const ClientSocket::AppProperty *appPr std::string oriInstallPath = "/data/app/el1/bundle/public/"; std::string oriDataPath = "/data/app/el2/" + currentUserId + "/base/"; std::string oriDatabasePath = "/data/app/el2/" + currentUserId + "/database/"; - std::string destDatabasePath = rootPath + "/data/storage/el2/database"; - std::string destInstallPath = rootPath + "/data/storage/el1/bundle"; - std::string destDataPath = rootPath + "/data/storage/el2/base"; + std::string destDatabasePath = rootPath + "/data/" + sandboxFolderName_ + "/el2/database"; + std::string destInstallPath = rootPath + "/data/" + sandboxFolderName_ + "/el1/bundle"; + std::string destDataPath = rootPath + "/data/" + sandboxFolderName_ + "/el2/base"; int rc = 0; std::string bundleName = appProperty->bundleName; @@ -442,11 +445,11 @@ int32_t AppSpawnServer::DoAppSandboxMount(const ClientSocket::AppProperty *appPr // Add distributedfile module support, later reconstruct it std::string oriDistributedPath = "/mnt/hmdfs/" + currentUserId + "/account/merge_view/data/" + bundleName; - std::string destDistributedPath = rootPath + "/data/storage/el2/distributedfiles"; + std::string destDistributedPath = rootPath + "/data/" + sandboxFolderName_ + "/el2/distributedfiles"; DoAppSandboxMountOnce(oriDistributedPath.c_str(), destDistributedPath.c_str()); std::string oriDistributedGroupPath = "/mnt/hmdfs/" + currentUserId + "/non_account/merge_view/data/" + bundleName; - std::string destDistributedGroupPath = rootPath + "/data/storage/el2/auth_groups"; + std::string destDistributedGroupPath = rootPath + "/data/" + sandboxFolderName_ + "/el2/auth_groups"; DoAppSandboxMountOnce(oriDistributedGroupPath.c_str(), destDistributedGroupPath.c_str()); const std::string oriappdataPath = "/data/accounts/account_0/appdata/"; @@ -456,11 +459,11 @@ int32_t AppSpawnServer::DoAppSandboxMount(const ClientSocket::AppProperty *appPr // to create some useful dir when mount point created std::vector mkdirInfo; std::string dirPath; - mkdirInfo.push_back("/data/storage/el1/bundle/webview"); - mkdirInfo.push_back("/data/storage/el2/base/el3"); - mkdirInfo.push_back("/data/storage/el2/base/el3/base"); - mkdirInfo.push_back("/data/storage/el2/base/el4"); - mkdirInfo.push_back("/data/storage/el2/base/el4/base"); + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el1/bundle/webview"); + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el2/base/el3"); + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el2/base/el3/base"); + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el2/base/el4"); + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el2/base/el4/base"); for (int i = 0; i < mkdirInfo.size(); i++) { dirPath = rootPath + mkdirInfo[i]; @@ -507,17 +510,17 @@ void AppSpawnServer::DoAppSandboxMkdir(std::string sandboxPackagePath, const Cli mkdirInfo.push_back("/data/"); mkdirInfo.push_back("/storage/"); mkdirInfo.push_back("/storage/media"); - mkdirInfo.push_back("/data/storage"); - // to create /mnt/sandbox//data/storage/el1 related path, later should delete this code. - mkdirInfo.push_back("/data/storage/el1"); - mkdirInfo.push_back("/data/storage/el1/bundle"); - mkdirInfo.push_back("/data/storage/el1/base"); - mkdirInfo.push_back("/data/storage/el1/database"); - mkdirInfo.push_back("/data/storage/el2"); - mkdirInfo.push_back("/data/storage/el2/base"); - mkdirInfo.push_back("/data/storage/el2/database"); - mkdirInfo.push_back("/data/storage/el2/distributedfiles"); - mkdirInfo.push_back("/data/storage/el2/auth_groups"); + mkdirInfo.push_back("/data/" + sandboxFolderName_); + // to create /mnt/sandbox//data//el1 related path, later should delete this code. + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el1"); + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el1/bundle"); + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el1/base"); + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el1/database"); + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el2"); + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el2/base"); + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el2/database"); + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el2/distributedfiles"); + mkdirInfo.push_back("/data/" + sandboxFolderName_ + "/el2/auth_groups"); // create applications folder for compatibility purpose mkdirInfo.push_back("/data/accounts"); mkdirInfo.push_back("/data/accounts/account_0"); @@ -609,6 +612,18 @@ int32_t AppSpawnServer::DoSandboxRootFolderCreate(std::string sandboxPackagePath return 0; } +std::string AppSpawnServer::GetRandomFolderName() +{ + std::string data; + std::ifstream infile; + + infile.open("/proc/sys/kernel/random/boot_id"); + infile >> data; + + infile.close(); + return data.substr(0, 4); +} + int32_t AppSpawnServer::SetAppSandboxProperty(const ClientSocket::AppProperty *appProperty) { int rc = 0; @@ -637,7 +652,7 @@ int32_t AppSpawnServer::SetAppSandboxProperty(const ClientSocket::AppProperty *a return rc; } - // to create /mnt/sandbox//data/storage related path + // to create /mnt/sandbox//data/ related path DoAppSandboxMkdir(sandboxPackagePath, appProperty); rc = DoAppSandboxMount(appProperty, sandboxPackagePath); diff --git a/src/include/appspawn_server.h b/src/include/appspawn_server.h old mode 100644 new mode 100755 index 06be8f02..1c88bd84 --- a/src/include/appspawn_server.h +++ b/src/include/appspawn_server.h @@ -152,6 +152,11 @@ private: */ void DoAppSandboxMkdir(std::string rootPath, const ClientSocket::AppProperty *appProperty); + /** + * Get random sandbox folder name + */ + std::string GetRandomFolderName(); + /** * Sets app sandbox property. */ @@ -183,7 +188,8 @@ private: void SetAppAccessToken(const ClientSocket::AppProperty *appProperty); private: const std::string deviceNull_ = "/dev/null"; - std::string socketName_ {}; + std::string sandboxFolderName_ {}; + std::string socketName_ {}; std::shared_ptr socket_ = nullptr; std::mutex mut_ {}; mutable std::condition_variable dataCond_ {}; -- Gitee