mirror of
https://gitee.com/openharmony/startup_appspawn
synced 2024-12-03 12:53:17 +00:00
sync arkweb remount code to newsandbox
Signed-off-by: nianyuu <zhouwenqiang12@huawei.com>
This commit is contained in:
parent
fcd3f76e46
commit
bdfc8d66b5
@ -155,7 +155,7 @@
|
|||||||
"sandbox-path" : "/data/utd"
|
"sandbox-path" : "/data/utd"
|
||||||
}, {
|
}, {
|
||||||
"src-path" : "/data/app/el1/bundle/public/<arkWebPackageName>",
|
"src-path" : "/data/app/el1/bundle/public/<arkWebPackageName>",
|
||||||
"sandbox-path" : "/data/storage/el1/bundle/arkwebcore"
|
"sandbox-path" : "/mnt/nweb/tmp"
|
||||||
}, {
|
}, {
|
||||||
"src-path" : "/mnt/hmdfs/<currentUserId>",
|
"src-path" : "/mnt/hmdfs/<currentUserId>",
|
||||||
"sandbox-path" : "/mnt/hmdfs/<currentUserId>"
|
"sandbox-path" : "/mnt/hmdfs/<currentUserId>"
|
||||||
@ -163,6 +163,10 @@
|
|||||||
"src-path" : "/mnt/hmdfs/<currentUserId>/cloud/data/<PackageName>",
|
"src-path" : "/mnt/hmdfs/<currentUserId>/cloud/data/<PackageName>",
|
||||||
"sandbox-path" : "/data/storage/el2/cloud"
|
"sandbox-path" : "/data/storage/el2/cloud"
|
||||||
}],
|
}],
|
||||||
|
"symbol-links" : [{
|
||||||
|
"target-name" : "/mnt/nweb/tmp",
|
||||||
|
"link-name" : "/data/storage/el1/bundle/arkwebcore"
|
||||||
|
}],
|
||||||
"mount-groups": ["el2", "el3", "el4"]
|
"mount-groups": ["el2", "el3", "el4"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -24,8 +24,11 @@
|
|||||||
"src-path" : "/system/bin",
|
"src-path" : "/system/bin",
|
||||||
"sandbox-path" : "/system/bin"
|
"sandbox-path" : "/system/bin"
|
||||||
}, {
|
}, {
|
||||||
"src-path" : "/system/<lib>",
|
"src-path" : "/system/lib",
|
||||||
"sandbox-path" : "/system/<lib>"
|
"sandbox-path" : "/system/lib"
|
||||||
|
}, {
|
||||||
|
"src-path" : "/system/lib64",
|
||||||
|
"sandbox-path" : "/system/lib64"
|
||||||
}, {
|
}, {
|
||||||
"src-path" : "/data/app/el1/bundle/public/<arkWebPackageName>",
|
"src-path" : "/data/app/el1/bundle/public/<arkWebPackageName>",
|
||||||
"sandbox-path" : "/data/storage/el1/bundle/arkwebcore"
|
"sandbox-path" : "/data/storage/el1/bundle/arkwebcore"
|
||||||
|
@ -483,7 +483,12 @@ static int DoSandboxPathSymLink(const SandboxContext *context,
|
|||||||
const char *target = GetSandboxRealVar(context, BUFFER_FOR_SOURCE, sandboxNode->target, NULL, NULL);
|
const char *target = GetSandboxRealVar(context, BUFFER_FOR_SOURCE, sandboxNode->target, NULL, NULL);
|
||||||
const char *linkName = GetSandboxRealVar(context, BUFFER_FOR_TARGET,
|
const char *linkName = GetSandboxRealVar(context, BUFFER_FOR_TARGET,
|
||||||
sandboxNode->linkName, context->rootPath, NULL);
|
sandboxNode->linkName, context->rootPath, NULL);
|
||||||
APPSPAWN_LOGV("symlink, from %{public}s to %{public}s", target, linkName);
|
APPSPAWN_LOGV("symlink from %{public}s to %{public}s", target, linkName);
|
||||||
|
if (access(linkName, F_OK) == 0) {
|
||||||
|
if (rmdir(linkName) != 0) {
|
||||||
|
APPSPAWN_LOGW("linkName %{public}s already exist and rmdir failed, errno %{public}d", linkName, errno);
|
||||||
|
}
|
||||||
|
}
|
||||||
int ret = symlink(target, linkName);
|
int ret = symlink(target, linkName);
|
||||||
if (ret && errno != EEXIST) {
|
if (ret && errno != EEXIST) {
|
||||||
if (sandboxNode->checkErrorFlag) {
|
if (sandboxNode->checkErrorFlag) {
|
||||||
@ -598,10 +603,17 @@ static const MountSharedTemplate MOUNT_SHARED_MAP[] = {
|
|||||||
static void MountDirToShared(const SandboxContext *context, AppSpawnSandboxCfg *sandbox)
|
static void MountDirToShared(const SandboxContext *context, AppSpawnSandboxCfg *sandbox)
|
||||||
{
|
{
|
||||||
const char rootPath[] = "/mnt/sandbox/";
|
const char rootPath[] = "/mnt/sandbox/";
|
||||||
|
const char nwebPath[] = "/mnt/nweb";
|
||||||
|
const char nwebTmpPath[] = "/mnt/nweb/tmp";
|
||||||
|
const char appRootName[] = "app-root";
|
||||||
AppSpawnMsgDacInfo *info = (AppSpawnMsgDacInfo *)GetSpawningMsgInfo(context, TLV_DAC_INFO);
|
AppSpawnMsgDacInfo *info = (AppSpawnMsgDacInfo *)GetSpawningMsgInfo(context, TLV_DAC_INFO);
|
||||||
size_t bundleNameLen = strlen(context->bundleName);
|
if (info == NULL || context->bundleName == NULL) {
|
||||||
if (info == NULL || context->bundleName == NULL ||
|
return;
|
||||||
IsUnlockStatus(info->uid, context->bundleName, bundleNameLen)) {
|
}
|
||||||
|
MountDir(info, appRootName, rootPath, nwebPath);
|
||||||
|
MountDir(info, appRootName, rootPath, nwebTmpPath);
|
||||||
|
|
||||||
|
if (IsUnlockStatus(info->uid, context->bundleName, strlen(context->bundleName))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +92,10 @@ ohos_executable("appspawn") {
|
|||||||
}
|
}
|
||||||
cflags = []
|
cflags = []
|
||||||
|
|
||||||
|
if (defined(appspawn_sandbox_new) && appspawn_sandbox_new) {
|
||||||
|
defines += [ "APPSPAWN_SANDBOX_NEW" ]
|
||||||
|
}
|
||||||
|
|
||||||
#ldflags = [ "-Wl,--dynamic-linker,/system/bin/linker64z" ]
|
#ldflags = [ "-Wl,--dynamic-linker,/system/bin/linker64z" ]
|
||||||
if (!defined(global_parts_info) ||
|
if (!defined(global_parts_info) ||
|
||||||
defined(global_parts_info.security_code_signature)) {
|
defined(global_parts_info.security_code_signature)) {
|
||||||
@ -193,6 +197,10 @@ ohos_executable("cjappspawn") {
|
|||||||
}
|
}
|
||||||
cflags = []
|
cflags = []
|
||||||
|
|
||||||
|
if (defined(appspawn_sandbox_new) && appspawn_sandbox_new) {
|
||||||
|
defines += [ "APPSPAWN_SANDBOX_NEW" ]
|
||||||
|
}
|
||||||
|
|
||||||
#ldflags = [ "-Wl,--dynamic-linker,/system/bin/linker64z" ]
|
#ldflags = [ "-Wl,--dynamic-linker,/system/bin/linker64z" ]
|
||||||
if (!defined(global_parts_info) ||
|
if (!defined(global_parts_info) ||
|
||||||
defined(global_parts_info.security_code_signature)) {
|
defined(global_parts_info.security_code_signature)) {
|
||||||
@ -259,6 +267,10 @@ ohos_executable("nativespawn") {
|
|||||||
}
|
}
|
||||||
cflags = []
|
cflags = []
|
||||||
|
|
||||||
|
if (defined(appspawn_sandbox_new) && appspawn_sandbox_new) {
|
||||||
|
defines += [ "APPSPAWN_SANDBOX_NEW" ]
|
||||||
|
}
|
||||||
|
|
||||||
#ldflags = [ "-Wl,--dynamic-linker,/system/bin/linker64z" ]
|
#ldflags = [ "-Wl,--dynamic-linker,/system/bin/linker64z" ]
|
||||||
if (!defined(global_parts_info) ||
|
if (!defined(global_parts_info) ||
|
||||||
defined(global_parts_info.security_code_signature)) {
|
defined(global_parts_info.security_code_signature)) {
|
||||||
|
@ -1294,6 +1294,51 @@ static bool CheckAllDigit(char *userId)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef APPSPAWN_SANDBOX_NEW
|
||||||
|
static int ProcessSpawnRemountMsg(AppSpawnConnection *connection, AppSpawnMsgNode *message)
|
||||||
|
{
|
||||||
|
char srcPath[PATH_SIZE] = {0};
|
||||||
|
int len = GetArkWebInstallPath("persist.arkwebcore.install_path", srcPath);
|
||||||
|
APPSPAWN_CHECK(len > 0, return -1, "Failed to get arkwebcore install path");
|
||||||
|
|
||||||
|
char *rootPath = "/mnt/sandbox";
|
||||||
|
DIR *rootDir = opendir(rootPath);
|
||||||
|
APPSPAWN_CHECK(rootDir != NULL, return -1, "Failed to opendir %{public}s, errno %{public}d", rootPath, errno);
|
||||||
|
|
||||||
|
struct dirent *ent;
|
||||||
|
while ((ent = readdir(rootDir)) != NULL) {
|
||||||
|
char *userId = ent->d_name;
|
||||||
|
if (strcmp(userId, ".") == 0 || strcmp(userId, "..") == 0 || !CheckAllDigit(userId)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
char destPath[PATH_SIZE] = {0};
|
||||||
|
int ret = snprintf_s(destPath, sizeof(destPath), sizeof(destPath) - 1,
|
||||||
|
"%s/%s/app-root/mnt/nweb/tmp", rootPath, userId);
|
||||||
|
APPSPAWN_CHECK(ret > 0, continue, "Failed to snprintf_s, errno %{public}d", errno);
|
||||||
|
|
||||||
|
ret = umount2(destPath, MNT_DETACH);
|
||||||
|
if (ret != 0) {
|
||||||
|
APPSPAWN_LOGW("Umount %{public}s failed, errno %{public}d", destPath, errno);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = mount(srcPath, destPath, NULL, MS_BIND | MS_REC, NULL);
|
||||||
|
if (ret != 0 && errno == EBUSY) {
|
||||||
|
ret = mount(srcPath, destPath, NULL, MS_BIND | MS_REC, NULL);
|
||||||
|
APPSPAWN_LOGW("Bind mount again %{public}s to %{public}s, ret %{public}d", srcPath, destPath, ret);
|
||||||
|
}
|
||||||
|
APPSPAWN_CHECK(ret == 0, continue,
|
||||||
|
"Failed to bind mount %{public}s to %{public}s, errno %{public}d", srcPath, destPath, errno);
|
||||||
|
|
||||||
|
ret = mount(NULL, destPath, NULL, MS_SHARED, NULL);
|
||||||
|
APPSPAWN_CHECK(ret == 0, continue,
|
||||||
|
"Failed to shared mount %{public}s, errno %{public}d", destPath, errno);
|
||||||
|
|
||||||
|
APPSPAWN_LOGI("Remount %{public}s to %{public}s success", srcPath, destPath);
|
||||||
|
}
|
||||||
|
closedir(rootDir);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
static int ProcessSpawnRemountMsg(AppSpawnConnection *connection, AppSpawnMsgNode *message)
|
static int ProcessSpawnRemountMsg(AppSpawnConnection *connection, AppSpawnMsgNode *message)
|
||||||
{
|
{
|
||||||
char srcPath[PATH_SIZE] = {0};
|
char srcPath[PATH_SIZE] = {0};
|
||||||
@ -1348,6 +1393,7 @@ static int ProcessSpawnRemountMsg(AppSpawnConnection *connection, AppSpawnMsgNod
|
|||||||
closedir(rootDir);
|
closedir(rootDir);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void ProcessSpawnRestartMsg(AppSpawnConnection *connection, AppSpawnMsgNode *message)
|
static void ProcessSpawnRestartMsg(AppSpawnConnection *connection, AppSpawnMsgNode *message)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user