From ade542c47c1f39ca4bcf9904f43e2d53df2fc29a Mon Sep 17 00:00:00 2001 From: yichengzhao Date: Fri, 15 Apr 2022 22:48:12 +0800 Subject: [PATCH] add permission Signed-off-by: yichengzhao Change-Id: I64187213968dda97012e53e09c88e8900e094bbf --- services/init/include/init_service.h | 1 + services/init/init_service_manager.c | 2 ++ services/init/standard/init_service.c | 11 +++++++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/services/init/include/init_service.h b/services/init/include/init_service.h index 202c467b..60748a05 100644 --- a/services/init/include/init_service.h +++ b/services/init/include/init_service.h @@ -141,6 +141,7 @@ typedef struct Service_ { uint64_t tokenId; char apl[MAX_APL_NAME + 1]; ServiceArgs capsArgs; + ServiceArgs permArgs; Perms servPerm; ServiceArgs pathArgs; ServiceArgs extraArgs; diff --git a/services/init/init_service_manager.c b/services/init/init_service_manager.c index f7120aee..ddf6f159 100644 --- a/services/init/init_service_manager.c +++ b/services/init/init_service_manager.c @@ -204,6 +204,7 @@ void ReleaseService(Service *service) FreeServiceArg(&service->pathArgs); FreeServiceArg(&service->writePidArgs); FreeServiceArg(&service->capsArgs); + FreeServiceArg(&service->permArgs); if (service->servPerm.caps != NULL) { free(service->servPerm.caps); @@ -808,6 +809,7 @@ int ParseOneService(const cJSON *curItem, Service *service) (void)GetServiceArgs(curItem, "writepid", MAX_WRITEPID_FILES, &service->writePidArgs); (void)GetServiceArgs(curItem, D_CAPS_STR_IN_CFG, MAX_WRITEPID_FILES, &service->capsArgs); + (void)GetServiceArgs(curItem, "permission", MAX_WRITEPID_FILES, &service->permArgs); (void)GetStringItem(curItem, APL_STR_IN_CFG, service->apl, MAX_APL_NAME); (void)GetCpuArgs(curItem, CPU_CORE_STR_IN_CFG, service); ret = GetServiceSandbox(curItem, service); diff --git a/services/init/standard/init_service.c b/services/init/standard/init_service.c index 1fba4e1c..d09019fe 100644 --- a/services/init/standard/init_service.c +++ b/services/init/standard/init_service.c @@ -148,8 +148,15 @@ void GetAccessToken(void) if (strlen(service->apl) == 0) { (void)strncpy_s(service->apl, sizeof(service->apl), "system_core", sizeof(service->apl) - 1); } - uint64_t tokenId = GetAccessTokenId(service->name, (const char **)service->capsArgs.argv, - service->capsArgs.count, service->apl); + NativeInfo nativeInfo = { + service->capsArgs.count, + service->permArgs.count, + (const char **)service->capsArgs.argv, + (const char **)service->permArgs.argv, + service->name, + service->apl, + }; + uint64_t tokenId = GetAccessTokenId(&nativeInfo); if (tokenId == 0) { INIT_LOGE("Get totken id %lld of service \' %s \' failed", tokenId, service->name); } -- GitLab