169570cc8Sopenharmony_ci/* 269570cc8Sopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd. 369570cc8Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 469570cc8Sopenharmony_ci * you may not use this file except in compliance with the License. 569570cc8Sopenharmony_ci * You may obtain a copy of the License at 669570cc8Sopenharmony_ci * 769570cc8Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 869570cc8Sopenharmony_ci * 969570cc8Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1069570cc8Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1169570cc8Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1269570cc8Sopenharmony_ci * See the License for the specific language governing permissions and 1369570cc8Sopenharmony_ci * limitations under the License. 1469570cc8Sopenharmony_ci */ 1569570cc8Sopenharmony_ci 1669570cc8Sopenharmony_ci#ifndef APPSPAWN_SANDBOX_H 1769570cc8Sopenharmony_ci#define APPSPAWN_SANDBOX_H 1869570cc8Sopenharmony_ci 1969570cc8Sopenharmony_ci#include "appspawn.h" 2069570cc8Sopenharmony_ci#include "appspawn_hook.h" 2169570cc8Sopenharmony_ci#include "appspawn_manager.h" 2269570cc8Sopenharmony_ci#include "appspawn_utils.h" 2369570cc8Sopenharmony_ci#include "list.h" 2469570cc8Sopenharmony_ci 2569570cc8Sopenharmony_ci#ifdef __cplusplus 2669570cc8Sopenharmony_ciextern "C" { 2769570cc8Sopenharmony_ci#endif 2869570cc8Sopenharmony_ci 2969570cc8Sopenharmony_ci#define SANDBOX_STAMP_FILE_SUFFIX ".stamp" 3069570cc8Sopenharmony_ci#define JSON_FLAGS_INTERNAL "__internal__" 3169570cc8Sopenharmony_ci#define SANDBOX_NWEBSPAWN_ROOT_PATH APPSPAWN_BASE_DIR "/mnt/sandbox/com.ohos.render/" 3269570cc8Sopenharmony_ci#define OHOS_RENDER "__internal__.com.ohos.render" 3369570cc8Sopenharmony_ci 3469570cc8Sopenharmony_ci#define PHYSICAL_APP_INSTALL_PATH "/data/app/el1/bundle/public/" 3569570cc8Sopenharmony_ci#define APL_SYSTEM_CORE "system_core" 3669570cc8Sopenharmony_ci#define APL_SYSTEM_BASIC "system_basic" 3769570cc8Sopenharmony_ci#define DEFAULT_NWEB_SANDBOX_SEC_PATH "/data/app/el1/bundle/public/com.ohos.nweb" // persist.nweb.sandbox.src_path 3869570cc8Sopenharmony_ci 3969570cc8Sopenharmony_ci#define PARAMETER_PACKAGE_NAME "<PackageName>" 4069570cc8Sopenharmony_ci#define PARAMETER_USER_ID "<currentUserId>" 4169570cc8Sopenharmony_ci#define PARAMETER_PACKAGE_INDEX "<PackageName_index>" 4269570cc8Sopenharmony_ci#define ARK_WEB_PERSIST_PACKAGE_NAME "persist.arkwebcore.package_name" 4369570cc8Sopenharmony_ci#define PARAMETER_ARK_WEB_PACKAGE_INDEX "<arkWebPackageName>" 4469570cc8Sopenharmony_ci#define SHAREFS_OPTION_USER ",user_id=" 4569570cc8Sopenharmony_ci 4669570cc8Sopenharmony_ci#define FILE_MODE 0711 4769570cc8Sopenharmony_ci#define MAX_SANDBOX_BUFFER 256 4869570cc8Sopenharmony_ci#define OPTIONS_MAX_LEN 256 4969570cc8Sopenharmony_ci#define APP_FLAGS_SECTION 0x80000000 5069570cc8Sopenharmony_ci#define BASIC_MOUNT_FLAGS (MS_REC | MS_BIND) 5169570cc8Sopenharmony_ci#define INVALID_UID ((uint32_t)-1) 5269570cc8Sopenharmony_ci#define PARAM_BUFFER_SIZE 128 5369570cc8Sopenharmony_ci 5469570cc8Sopenharmony_ci#ifdef APPSPAWN_64 5569570cc8Sopenharmony_ci#define APPSPAWN_LIB_NAME "lib64" 5669570cc8Sopenharmony_ci#else 5769570cc8Sopenharmony_ci#define APPSPAWN_LIB_NAME "lib" 5869570cc8Sopenharmony_ci#endif 5969570cc8Sopenharmony_ci 6069570cc8Sopenharmony_ci#define MOUNT_MODE_NONE 0 // "none" 6169570cc8Sopenharmony_ci#define MOUNT_MODE_ALWAYS 1 // "always" 6269570cc8Sopenharmony_ci#define MOUNT_MODE_NOT_EXIST 2 // "not-exists" 6369570cc8Sopenharmony_ci 6469570cc8Sopenharmony_ci#define MOUNT_PATH_OP_NONE ((uint32_t)-1) 6569570cc8Sopenharmony_ci#define MOUNT_PATH_OP_SYMLINK SANDBOX_TAG_INVALID 6669570cc8Sopenharmony_ci#define MOUNT_PATH_OP_UNMOUNT (SANDBOX_TAG_INVALID + 1) 6769570cc8Sopenharmony_ci#define MOUNT_PATH_OP_ONLY_SANDBOX (SANDBOX_TAG_INVALID + 2) 6869570cc8Sopenharmony_ci#define MOUNT_PATH_OP_REPLACE_BY_SANDBOX (SANDBOX_TAG_INVALID + 3) 6969570cc8Sopenharmony_ci#define MOUNT_PATH_OP_REPLACE_BY_SRC (SANDBOX_TAG_INVALID + 4) 7069570cc8Sopenharmony_ci#define FILE_CROSS_APP_MODE "ohos.permission.FILE_CROSS_APP" 7169570cc8Sopenharmony_ci#define FILE_ACCESS_COMMON_DIR_MODE "ohos.permission.FILE_ACCESS_COMMON_DIR" 7269570cc8Sopenharmony_ci#define ACCESS_DLP_FILE_MODE "ohos.permission.ACCESS_DLP_FILE" 7369570cc8Sopenharmony_ci#define FILE_ACCESS_MANAGER_MODE "ohos.permission.FILE_ACCESS_MANAGER" 7469570cc8Sopenharmony_ci 7569570cc8Sopenharmony_citypedef enum SandboxTag { 7669570cc8Sopenharmony_ci SANDBOX_TAG_MOUNT_PATH = 0, 7769570cc8Sopenharmony_ci SANDBOX_TAG_MOUNT_FILE, 7869570cc8Sopenharmony_ci SANDBOX_TAG_SYMLINK, 7969570cc8Sopenharmony_ci SANDBOX_TAG_PERMISSION, 8069570cc8Sopenharmony_ci SANDBOX_TAG_PACKAGE_NAME, 8169570cc8Sopenharmony_ci SANDBOX_TAG_SPAWN_FLAGS, 8269570cc8Sopenharmony_ci SANDBOX_TAG_NAME_GROUP, 8369570cc8Sopenharmony_ci SANDBOX_TAG_SYSTEM_CONST, 8469570cc8Sopenharmony_ci SANDBOX_TAG_APP_VARIABLE, 8569570cc8Sopenharmony_ci SANDBOX_TAG_APP_CONST, 8669570cc8Sopenharmony_ci SANDBOX_TAG_REQUIRED, 8769570cc8Sopenharmony_ci SANDBOX_TAG_INVALID 8869570cc8Sopenharmony_ci} SandboxNodeType; 8969570cc8Sopenharmony_ci 9069570cc8Sopenharmony_citypedef enum { 9169570cc8Sopenharmony_ci SANDBOX_PACKAGENAME_DEFAULT = 0, 9269570cc8Sopenharmony_ci SANDBOX_PACKAGENAME_CLONE, 9369570cc8Sopenharmony_ci SANDBOX_PACKAGENAME_EXTENSION, 9469570cc8Sopenharmony_ci SANDBOX_PACKAGENAME_CLONE_AND_EXTENSION, 9569570cc8Sopenharmony_ci SANDBOX_PACKAGENAME_ATOMIC_SERVICE, 9669570cc8Sopenharmony_ci} SandboxVarPackageNameType; 9769570cc8Sopenharmony_ci 9869570cc8Sopenharmony_citypedef struct { 9969570cc8Sopenharmony_ci struct ListNode node; 10069570cc8Sopenharmony_ci uint32_t type; 10169570cc8Sopenharmony_ci} SandboxMountNode; 10269570cc8Sopenharmony_ci 10369570cc8Sopenharmony_citypedef struct TagSandboxQueue { 10469570cc8Sopenharmony_ci struct ListNode front; 10569570cc8Sopenharmony_ci uint32_t type; 10669570cc8Sopenharmony_ci} SandboxQueue; 10769570cc8Sopenharmony_ci 10869570cc8Sopenharmony_ci/* 10969570cc8Sopenharmony_ci"create-on-demand": { 11069570cc8Sopenharmony_ci "uid": "userId", // 默认使用消息的uid、gid 11169570cc8Sopenharmony_ci "gid": "groupId", 11269570cc8Sopenharmony_ci "ugo": 750 11369570cc8Sopenharmony_ci } 11469570cc8Sopenharmony_ci*/ 11569570cc8Sopenharmony_citypedef struct { 11669570cc8Sopenharmony_ci uid_t uid; 11769570cc8Sopenharmony_ci gid_t gid; 11869570cc8Sopenharmony_ci uint32_t mode; 11969570cc8Sopenharmony_ci} PathDemandInfo; 12069570cc8Sopenharmony_ci 12169570cc8Sopenharmony_citypedef struct TagPathMountNode { 12269570cc8Sopenharmony_ci SandboxMountNode sandboxNode; 12369570cc8Sopenharmony_ci char *source; // source 目录,一般是全局的fs 目录 12469570cc8Sopenharmony_ci char *target; // 沙盒化后的目录 12569570cc8Sopenharmony_ci mode_t destMode; // "dest-mode": "S_IRUSR | S_IWOTH | S_IRWXU " 默认值:0 12669570cc8Sopenharmony_ci uint32_t mountSharedFlag : 1; // "mount-shared-flag" : "true", 默认值:false 12769570cc8Sopenharmony_ci uint32_t createDemand : 1; 12869570cc8Sopenharmony_ci uint32_t checkErrorFlag : 1; 12969570cc8Sopenharmony_ci uint32_t category; 13069570cc8Sopenharmony_ci char *appAplName; 13169570cc8Sopenharmony_ci PathDemandInfo demandInfo[0]; 13269570cc8Sopenharmony_ci} PathMountNode; 13369570cc8Sopenharmony_ci 13469570cc8Sopenharmony_citypedef struct TagSymbolLinkNode { 13569570cc8Sopenharmony_ci SandboxMountNode sandboxNode; 13669570cc8Sopenharmony_ci char *target; 13769570cc8Sopenharmony_ci char *linkName; 13869570cc8Sopenharmony_ci mode_t destMode; // "dest-mode": "S_IRUSR | S_IWOTH | S_IRWXU " 13969570cc8Sopenharmony_ci uint32_t checkErrorFlag : 1; 14069570cc8Sopenharmony_ci} SymbolLinkNode; 14169570cc8Sopenharmony_ci 14269570cc8Sopenharmony_citypedef struct TagSandboxSection { 14369570cc8Sopenharmony_ci SandboxMountNode sandboxNode; 14469570cc8Sopenharmony_ci struct ListNode front; // mount-path 14569570cc8Sopenharmony_ci char *name; 14669570cc8Sopenharmony_ci uint32_t number : 16; 14769570cc8Sopenharmony_ci uint32_t gidCount : 16; 14869570cc8Sopenharmony_ci gid_t *gidTable; // "gids": [1006, 1008], 14969570cc8Sopenharmony_ci uint32_t sandboxSwitch : 1; // "sandbox-switch": "ON", 15069570cc8Sopenharmony_ci uint32_t sandboxShared : 1; // "sandbox-switch": "ON", 15169570cc8Sopenharmony_ci SandboxMountNode **nameGroups; 15269570cc8Sopenharmony_ci} SandboxSection; 15369570cc8Sopenharmony_ci 15469570cc8Sopenharmony_citypedef struct { 15569570cc8Sopenharmony_ci SandboxSection section; 15669570cc8Sopenharmony_ci} SandboxPackageNameNode; 15769570cc8Sopenharmony_ci 15869570cc8Sopenharmony_citypedef struct { 15969570cc8Sopenharmony_ci SandboxSection section; 16069570cc8Sopenharmony_ci uint32_t flagIndex; 16169570cc8Sopenharmony_ci} SandboxFlagsNode; 16269570cc8Sopenharmony_ci 16369570cc8Sopenharmony_citypedef struct TagSandboxGroupNode { 16469570cc8Sopenharmony_ci SandboxSection section; 16569570cc8Sopenharmony_ci uint32_t destType; 16669570cc8Sopenharmony_ci PathMountNode *depNode; 16769570cc8Sopenharmony_ci uint32_t depMode; 16869570cc8Sopenharmony_ci uint32_t depMounted : 1; // 是否执行了挂载 16969570cc8Sopenharmony_ci} SandboxNameGroupNode; 17069570cc8Sopenharmony_ci 17169570cc8Sopenharmony_citypedef struct TagPermissionNode { 17269570cc8Sopenharmony_ci SandboxSection section; 17369570cc8Sopenharmony_ci int32_t permissionIndex; 17469570cc8Sopenharmony_ci} SandboxPermissionNode; 17569570cc8Sopenharmony_ci 17669570cc8Sopenharmony_citypedef struct TagAppSpawnSandboxCfg { 17769570cc8Sopenharmony_ci AppSpawnExtData extData; 17869570cc8Sopenharmony_ci SandboxQueue requiredQueue; 17969570cc8Sopenharmony_ci SandboxQueue permissionQueue; 18069570cc8Sopenharmony_ci SandboxQueue packageNameQueue; // SandboxSection 18169570cc8Sopenharmony_ci SandboxQueue spawnFlagsQueue; 18269570cc8Sopenharmony_ci SandboxQueue nameGroupsQueue; 18369570cc8Sopenharmony_ci uint32_t depNodeCount; 18469570cc8Sopenharmony_ci SandboxNameGroupNode **depGroupNodes; 18569570cc8Sopenharmony_ci int32_t maxPermissionIndex; 18669570cc8Sopenharmony_ci uint32_t sandboxNsFlags; // "sandbox-ns-flags": [ "pid", "net" ], // for appspawn and newspawn 18769570cc8Sopenharmony_ci // for comm section 18869570cc8Sopenharmony_ci uint32_t topSandboxSwitch : 1; // "top-sandbox-switch": "ON", 18969570cc8Sopenharmony_ci uint32_t appFullMountEnable : 1; 19069570cc8Sopenharmony_ci uint32_t pidNamespaceSupport : 1; 19169570cc8Sopenharmony_ci uint32_t mounted : 1; 19269570cc8Sopenharmony_ci char *rootPath; 19369570cc8Sopenharmony_ci} AppSpawnSandboxCfg; 19469570cc8Sopenharmony_ci 19569570cc8Sopenharmony_cienum { 19669570cc8Sopenharmony_ci BUFFER_FOR_SOURCE, 19769570cc8Sopenharmony_ci BUFFER_FOR_TARGET, 19869570cc8Sopenharmony_ci BUFFER_FOR_TMP, 19969570cc8Sopenharmony_ci MAX_BUFFER 20069570cc8Sopenharmony_ci}; 20169570cc8Sopenharmony_ci 20269570cc8Sopenharmony_citypedef struct TagSandboxBuffer { 20369570cc8Sopenharmony_ci uint32_t bufferLen; 20469570cc8Sopenharmony_ci uint32_t current; 20569570cc8Sopenharmony_ci char *buffer; 20669570cc8Sopenharmony_ci} SandboxBuffer; 20769570cc8Sopenharmony_ci 20869570cc8Sopenharmony_citypedef struct TagSandboxContext { 20969570cc8Sopenharmony_ci SandboxBuffer buffer[MAX_BUFFER]; 21069570cc8Sopenharmony_ci const char *bundleName; 21169570cc8Sopenharmony_ci const AppSpawnMsgNode *message; // 修改成操作消息 21269570cc8Sopenharmony_ci uint32_t sandboxSwitch : 1; 21369570cc8Sopenharmony_ci uint32_t sandboxShared : 1; 21469570cc8Sopenharmony_ci uint32_t bundleHasWps : 1; 21569570cc8Sopenharmony_ci uint32_t dlpBundle : 1; 21669570cc8Sopenharmony_ci uint32_t appFullMountEnable : 1; 21769570cc8Sopenharmony_ci uint32_t nwebspawn : 1; 21869570cc8Sopenharmony_ci uint32_t sandboxNsFlags; 21969570cc8Sopenharmony_ci char *rootPath; 22069570cc8Sopenharmony_ci} SandboxContext; 22169570cc8Sopenharmony_ci 22269570cc8Sopenharmony_citypedef struct { 22369570cc8Sopenharmony_ci const char *sandboxPath; 22469570cc8Sopenharmony_ci const char *permission; 22569570cc8Sopenharmony_ci} MountSharedTemplate; 22669570cc8Sopenharmony_ci 22769570cc8Sopenharmony_ci/** 22869570cc8Sopenharmony_ci * @brief AppSpawnSandboxCfg op 22969570cc8Sopenharmony_ci * 23069570cc8Sopenharmony_ci * @return AppSpawnSandboxCfg* 23169570cc8Sopenharmony_ci */ 23269570cc8Sopenharmony_ciAppSpawnSandboxCfg *CreateAppSpawnSandbox(ExtDataType type); 23369570cc8Sopenharmony_ciAppSpawnSandboxCfg *GetAppSpawnSandbox(const AppSpawnMgr *content, ExtDataType type); 23469570cc8Sopenharmony_civoid DeleteAppSpawnSandbox(AppSpawnSandboxCfg *sandbox); 23569570cc8Sopenharmony_ciint LoadAppSandboxConfig(AppSpawnSandboxCfg *sandbox, RunMode mode); 23669570cc8Sopenharmony_civoid DumpAppSpawnSandboxCfg(AppSpawnSandboxCfg *sandbox); 23769570cc8Sopenharmony_ci 23869570cc8Sopenharmony_ci/** 23969570cc8Sopenharmony_ci * @brief SandboxSection op 24069570cc8Sopenharmony_ci * 24169570cc8Sopenharmony_ci */ 24269570cc8Sopenharmony_ciSandboxSection *CreateSandboxSection(const char *name, uint32_t dataLen, uint32_t type); 24369570cc8Sopenharmony_ciSandboxSection *GetSandboxSection(const SandboxQueue *queue, const char *name); 24469570cc8Sopenharmony_civoid AddSandboxSection(SandboxSection *node, SandboxQueue *queue); 24569570cc8Sopenharmony_civoid DeleteSandboxSection(SandboxSection *node); 24669570cc8Sopenharmony_ci__attribute__((always_inline)) inline uint32_t GetSectionType(const SandboxSection *section) 24769570cc8Sopenharmony_ci{ 24869570cc8Sopenharmony_ci return section != NULL ? section->sandboxNode.type : SANDBOX_TAG_INVALID; 24969570cc8Sopenharmony_ci} 25069570cc8Sopenharmony_ci 25169570cc8Sopenharmony_ci/** 25269570cc8Sopenharmony_ci * @brief SandboxMountNode op 25369570cc8Sopenharmony_ci * 25469570cc8Sopenharmony_ci */ 25569570cc8Sopenharmony_ciSandboxMountNode *CreateSandboxMountNode(uint32_t dataLen, uint32_t type); 25669570cc8Sopenharmony_ciSandboxMountNode *GetFirstSandboxMountNode(const SandboxSection *section); 25769570cc8Sopenharmony_civoid DeleteSandboxMountNode(SandboxMountNode *mountNode); 25869570cc8Sopenharmony_civoid AddSandboxMountNode(SandboxMountNode *node, SandboxSection *section); 25969570cc8Sopenharmony_ciPathMountNode *GetPathMountNode(const SandboxSection *section, int type, const char *source, const char *target); 26069570cc8Sopenharmony_ciSymbolLinkNode *GetSymbolLinkNode(const SandboxSection *section, const char *target, const char *linkName); 26169570cc8Sopenharmony_ci 26269570cc8Sopenharmony_ci/** 26369570cc8Sopenharmony_ci * @brief sandbox mount interface 26469570cc8Sopenharmony_ci * 26569570cc8Sopenharmony_ci */ 26669570cc8Sopenharmony_ciint MountSandboxConfigs(AppSpawnSandboxCfg *sandbox, const AppSpawningCtx *property, int nwebspawn); 26769570cc8Sopenharmony_ciint StagedMountSystemConst(AppSpawnSandboxCfg *sandbox, const AppSpawningCtx *property, int nwebspawn); 26869570cc8Sopenharmony_ciint StagedMountPreUnShare(const SandboxContext *context, AppSpawnSandboxCfg *sandbox); 26969570cc8Sopenharmony_ciint StagedMountPostUnshare(const SandboxContext *context, const AppSpawnSandboxCfg *sandbox); 27069570cc8Sopenharmony_ci// 在子进程退出时,由父进程发起unmount操作 27169570cc8Sopenharmony_ciint UnmountDepPaths(const AppSpawnSandboxCfg *sandbox, uid_t uid); 27269570cc8Sopenharmony_ciint UnmountSandboxConfigs(const AppSpawnSandboxCfg *sandbox, uid_t uid, const char *name); 27369570cc8Sopenharmony_ci 27469570cc8Sopenharmony_ci/** 27569570cc8Sopenharmony_ci * @brief Variable op 27669570cc8Sopenharmony_ci * 27769570cc8Sopenharmony_ci */ 27869570cc8Sopenharmony_citypedef struct { 27969570cc8Sopenharmony_ci struct ListNode node; 28069570cc8Sopenharmony_ci ReplaceVarHandler replaceVar; 28169570cc8Sopenharmony_ci char name[0]; 28269570cc8Sopenharmony_ci} AppSandboxVarNode; 28369570cc8Sopenharmony_ci 28469570cc8Sopenharmony_citypedef struct TagVarExtraData { 28569570cc8Sopenharmony_ci uint32_t sandboxTag; 28669570cc8Sopenharmony_ci uint32_t operation; 28769570cc8Sopenharmony_ci char *variablePackageName; 28869570cc8Sopenharmony_ci union { 28969570cc8Sopenharmony_ci PathMountNode *depNode; 29069570cc8Sopenharmony_ci } data; 29169570cc8Sopenharmony_ci} VarExtraData; 29269570cc8Sopenharmony_ci 29369570cc8Sopenharmony_civoid ClearVariable(void); 29469570cc8Sopenharmony_civoid AddDefaultVariable(void); 29569570cc8Sopenharmony_ciconst char *GetSandboxRealVar(const SandboxContext *context, 29669570cc8Sopenharmony_ci uint32_t bufferType, const char *source, const char *prefix, const VarExtraData *extraData); 29769570cc8Sopenharmony_ci 29869570cc8Sopenharmony_ci/** 29969570cc8Sopenharmony_ci * @brief expand config 30069570cc8Sopenharmony_ci * 30169570cc8Sopenharmony_ci */ 30269570cc8Sopenharmony_citypedef struct { 30369570cc8Sopenharmony_ci struct ListNode node; 30469570cc8Sopenharmony_ci ProcessExpandSandboxCfg cfgHandle; 30569570cc8Sopenharmony_ci int prio; 30669570cc8Sopenharmony_ci char name[0]; 30769570cc8Sopenharmony_ci} AppSandboxExpandAppCfgNode; 30869570cc8Sopenharmony_ciint ProcessExpandAppSandboxConfig(const SandboxContext *context, 30969570cc8Sopenharmony_ci const AppSpawnSandboxCfg *appSandBox, const char *name); 31069570cc8Sopenharmony_civoid AddDefaultExpandAppSandboxConfigHandle(void); 31169570cc8Sopenharmony_civoid ClearExpandAppSandboxConfigHandle(void); 31269570cc8Sopenharmony_ci 31369570cc8Sopenharmony_ci__attribute__((always_inline)) inline void *GetSpawningMsgInfo(const SandboxContext *context, uint32_t type) 31469570cc8Sopenharmony_ci{ 31569570cc8Sopenharmony_ci APPSPAWN_CHECK(context->message != NULL, 31669570cc8Sopenharmony_ci return NULL, "Invalid property for type %{public}u", type); 31769570cc8Sopenharmony_ci return GetAppSpawnMsgInfo(context->message, type); 31869570cc8Sopenharmony_ci} 31969570cc8Sopenharmony_ci 32069570cc8Sopenharmony_ci/** 32169570cc8Sopenharmony_ci * @brief Sandbox Context op 32269570cc8Sopenharmony_ci * 32369570cc8Sopenharmony_ci * @return SandboxContext* 32469570cc8Sopenharmony_ci */ 32569570cc8Sopenharmony_ciSandboxContext *GetSandboxContext(void); 32669570cc8Sopenharmony_civoid DeleteSandboxContext(SandboxContext *context); 32769570cc8Sopenharmony_ci 32869570cc8Sopenharmony_ci/** 32969570cc8Sopenharmony_ci * @brief defineMount Arg Template and operation 33069570cc8Sopenharmony_ci * 33169570cc8Sopenharmony_ci */ 33269570cc8Sopenharmony_cienum { 33369570cc8Sopenharmony_ci MOUNT_TMP_DEFAULT, 33469570cc8Sopenharmony_ci MOUNT_TMP_RDONLY, 33569570cc8Sopenharmony_ci MOUNT_TMP_EPFS, 33669570cc8Sopenharmony_ci MOUNT_TMP_DAC_OVERRIDE_DELETE, 33769570cc8Sopenharmony_ci MOUNT_TMP_DAC_OVERRIDE, 33869570cc8Sopenharmony_ci MOUNT_TMP_FUSE, 33969570cc8Sopenharmony_ci MOUNT_TMP_DLP_FUSE, 34069570cc8Sopenharmony_ci MOUNT_TMP_SHRED, 34169570cc8Sopenharmony_ci MOUNT_TMP_MAX 34269570cc8Sopenharmony_ci}; 34369570cc8Sopenharmony_ci 34469570cc8Sopenharmony_citypedef struct { 34569570cc8Sopenharmony_ci char *name; 34669570cc8Sopenharmony_ci uint32_t category; 34769570cc8Sopenharmony_ci const char *fsType; 34869570cc8Sopenharmony_ci unsigned long mountFlags; 34969570cc8Sopenharmony_ci const char *options; 35069570cc8Sopenharmony_ci mode_t mountSharedFlag; 35169570cc8Sopenharmony_ci} MountArgTemplate; 35269570cc8Sopenharmony_ci 35369570cc8Sopenharmony_citypedef struct { 35469570cc8Sopenharmony_ci const char *name; 35569570cc8Sopenharmony_ci unsigned long flags; 35669570cc8Sopenharmony_ci} SandboxFlagInfo; 35769570cc8Sopenharmony_ci 35869570cc8Sopenharmony_ciuint32_t GetMountCategory(const char *name); 35969570cc8Sopenharmony_ciconst MountArgTemplate *GetMountArgTemplate(uint32_t category); 36069570cc8Sopenharmony_ciconst SandboxFlagInfo *GetSandboxFlagInfo(const char *key, const SandboxFlagInfo *flagsInfos, uint32_t count); 36169570cc8Sopenharmony_ciint GetPathMode(const char *name); 36269570cc8Sopenharmony_ci 36369570cc8Sopenharmony_civoid DumpMountPathMountNode(const PathMountNode *pathNode); 36469570cc8Sopenharmony_ci 36569570cc8Sopenharmony_citypedef struct TagMountArg { 36669570cc8Sopenharmony_ci const char *originPath; 36769570cc8Sopenharmony_ci const char *destinationPath; 36869570cc8Sopenharmony_ci const char *fsType; 36969570cc8Sopenharmony_ci unsigned long mountFlags; 37069570cc8Sopenharmony_ci const char *options; 37169570cc8Sopenharmony_ci mode_t mountSharedFlag; 37269570cc8Sopenharmony_ci} MountArg; 37369570cc8Sopenharmony_ci 37469570cc8Sopenharmony_ciint SandboxMountPath(const MountArg *arg); 37569570cc8Sopenharmony_ci 37669570cc8Sopenharmony_ci__attribute__((always_inline)) inline int IsPathEmpty(const char *path) 37769570cc8Sopenharmony_ci{ 37869570cc8Sopenharmony_ci if (path == NULL || path[0] == '\0') { 37969570cc8Sopenharmony_ci return 1; 38069570cc8Sopenharmony_ci } 38169570cc8Sopenharmony_ci return 0; 38269570cc8Sopenharmony_ci} 38369570cc8Sopenharmony_ci 38469570cc8Sopenharmony_ci#ifdef __cplusplus 38569570cc8Sopenharmony_ci} 38669570cc8Sopenharmony_ci#endif 38769570cc8Sopenharmony_ci#endif // APPSPAWN_SANDBOX_H 388