Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Startup Appspawn Lite
提交
ba65620e
S
Startup Appspawn Lite
项目概览
OpenHarmony
/
Startup Appspawn Lite
8 个月 前同步成功
通知
4
Star
43
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Startup Appspawn Lite
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
ba65620e
编写于
9月 17, 2020
作者:
C
changcheng-weng
提交者:
Gitee
9月 17, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update src/appspawn_process.c.
上级
9dbe284f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
9 addition
and
37 deletion
+9
-37
src/appspawn_process.c
src/appspawn_process.c
+9
-37
未找到文件。
src/appspawn_process.c
浏览文件 @
ba65620e
...
...
@@ -19,6 +19,7 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include "ability_main.h"
#include "appspawn_adapter.h"
#include "log.h"
#include "securec.h"
...
...
@@ -31,17 +32,12 @@ extern "C" {
#define DEFAULT_UMASK 022
#define CAP_NUM 2
#define ABILITY_EXE_FILE_FULL_PATH "/bin/abilityMain"
#define ABILITY_EXE_FILE_NAME "abilityMain"
#define ENV_TITLE "LD_LIBRARY_PATH="
#define UPPER_BOUND_GID 999
#define LOWER_BOUND_GID 100
#define GRP_NUM 2
#define DEVMGR_GRP 99
static
const
unsigned
int
MAX_IDENTITY_ID_LENGTH
=
25
;
static
const
unsigned
int
MAX_PROCESS_NAME_LENGTH
=
130
;
static
int
SetPerms
(
uid_t
uID
,
gid_t
gID
)
{
gid_t
groups
[
GRP_NUM
];
...
...
@@ -118,35 +114,11 @@ static char* GetEnvStrs(const MessageSt* msgSt)
pid_t
CreateProcess
(
const
MessageSt
*
msgSt
)
{
char
identityIDStr
[
MAX_IDENTITY_ID_LENGTH
];
char
processNameStr
[
MAX_PROCESS_NAME_LENGTH
];
if
(
memset_s
(
identityIDStr
,
MAX_IDENTITY_ID_LENGTH
,
'\0'
,
MAX_IDENTITY_ID_LENGTH
)
!=
EOK
||
memset_s
(
processNameStr
,
MAX_PROCESS_NAME_LENGTH
,
'\0'
,
MAX_PROCESS_NAME_LENGTH
)
!=
EOK
)
{
HILOG_ERROR
(
HILOG_MODULE_HIVIEW
,
"[appspawn] create service, memset_s failed."
);
return
-
1
;
}
if
(
sprintf_s
(
identityIDStr
,
MAX_IDENTITY_ID_LENGTH
,
"%s"
,
msgSt
->
identityID
)
<=
0
||
sprintf_s
(
processNameStr
,
MAX_PROCESS_NAME_LENGTH
,
"%s"
,
msgSt
->
bundleName
)
<=
0
)
{
HILOG_ERROR
(
HILOG_MODULE_HIVIEW
,
"[appspawn] sprintf_s failed. id %{public}s, name %{public}s."
,
\
msgSt
->
identityID
,
msgSt
->
bundleName
);
return
-
1
;
}
char
*
envStr
=
GetEnvStrs
(
msgSt
);
if
(
envStr
==
NULL
)
{
return
-
1
;
}
// check if the exe file exists
struct
stat
pathStat
=
{
0
};
if
(
stat
(
ABILITY_EXE_FILE_FULL_PATH
,
&
pathStat
)
!=
0
)
{
HILOG_ERROR
(
HILOG_MODULE_HIVIEW
,
"[appspawn] stat %{public}s failed, err %{public}d."
,
\
ABILITY_EXE_FILE_FULL_PATH
,
errno
);
free
(
envStr
);
return
-
1
;
}
pid_t
newPID
=
fork
();
if
(
newPID
<
0
)
{
HILOG_ERROR
(
HILOG_MODULE_HIVIEW
,
"[appspawn] create process, fork failed! err %{public}d."
,
errno
);
...
...
@@ -158,18 +130,18 @@ pid_t CreateProcess(const MessageSt* msgSt)
if
(
newPID
==
0
)
{
// set permissions
if
(
SetPerms
(
msgSt
->
uID
,
msgSt
->
gID
)
!=
0
)
{
HILOG_ERROR
(
HILOG_MODULE_HIVIEW
,
"[appspawn] process %{public}s exit!"
,
processNameStr
);
_
exit
(
0x7f
);
// 0x7f: user specified
HILOG_ERROR
(
HILOG_MODULE_HIVIEW
,
"[appspawn] process %{public}s exit!"
,
msgSt
->
bundleName
);
exit
(
0x7f
);
// 0x7f: user specified
}
char
*
argv
[]
=
{
ABILITY_EXE_FILE_NAME
,
identityIDStr
,
processNameStr
,
NULL
};
char
*
env
[]
=
{
envStr
,
NULL
};
if
(
execve
(
ABILITY_EXE_FILE_FULL_PATH
,
argv
,
env
)
!=
0
)
{
HILOG_ERROR
(
HILOG_MODULE_HIVIEW
,
"[appspawn] execve %{public}s failed! err %{public}d."
,
\
ABILITY_EXE_FILE_FULL_PATH
,
errno
);
(
void
)
prctl
(
PR_SET_NAME
,
msgSt
->
bundleName
);
if
(
AbilityMain
(
msgSt
->
identityID
)
!=
0
)
{
HILOG_ERROR
(
HILOG_MODULE_HIVIEW
,
"[appspawn] AbilityMain execute failed, pid %{public}d."
,
getpid
());
exit
(
0x7f
);
// 0x7f: user specified
}
HILOG_ERROR
(
HILOG_MODULE_HIVIEW
,
"[appspawn] sub-process exit, pid %{public}d."
,
getpid
());
_
exit
(
0x7f
);
// 0x7f: user specified
exit
(
0x7f
);
// 0x7f: user specified
}
free
(
envStr
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录