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#include "app_spawn_stub.h" 1769570cc8Sopenharmony_ci 1869570cc8Sopenharmony_ci#include <cerrno> 1969570cc8Sopenharmony_ci#include <csignal> 2069570cc8Sopenharmony_ci#include <cstdarg> 2169570cc8Sopenharmony_ci#include <cstdbool> 2269570cc8Sopenharmony_ci#include <cstdlib> 2369570cc8Sopenharmony_ci#include <ctime> 2469570cc8Sopenharmony_ci#include <fcntl.h> 2569570cc8Sopenharmony_ci#include <pthread.h> 2669570cc8Sopenharmony_ci#include <pwd.h> 2769570cc8Sopenharmony_ci#include <grp.h> 2869570cc8Sopenharmony_ci 2969570cc8Sopenharmony_ci#include <linux/capability.h> 3069570cc8Sopenharmony_ci#include <sys/socket.h> 3169570cc8Sopenharmony_ci#include <sys/stat.h> 3269570cc8Sopenharmony_ci#include <sys/time.h> 3369570cc8Sopenharmony_ci#include <sys/types.h> 3469570cc8Sopenharmony_ci#include <sys/un.h> 3569570cc8Sopenharmony_ci#include <sys/wait.h> 3669570cc8Sopenharmony_ci#include <unistd.h> 3769570cc8Sopenharmony_ci 3869570cc8Sopenharmony_ci#include "access_token.h" 3969570cc8Sopenharmony_ci#include "hilog/log.h" 4069570cc8Sopenharmony_ci#include "securec.h" 4169570cc8Sopenharmony_ci#include "token_setproc.h" 4269570cc8Sopenharmony_ci#include "tokenid_kit.h" 4369570cc8Sopenharmony_ci 4469570cc8Sopenharmony_ci#ifdef WITH_SELINUX 4569570cc8Sopenharmony_ci#include "hap_restorecon.h" 4669570cc8Sopenharmony_ci#endif 4769570cc8Sopenharmony_ci#ifdef WITH_SECCOMP 4869570cc8Sopenharmony_ci#include "seccomp_policy.h" 4969570cc8Sopenharmony_ci#include <sys/prctl.h> 5069570cc8Sopenharmony_ci#endif 5169570cc8Sopenharmony_ci 5269570cc8Sopenharmony_cinamespace OHOS { 5369570cc8Sopenharmony_cinamespace system { 5469570cc8Sopenharmony_ci bool GetIntParameter(const std::string &key, bool def, bool arg1 = false, bool arg2 = false) 5569570cc8Sopenharmony_ci { 5669570cc8Sopenharmony_ci return def; 5769570cc8Sopenharmony_ci } 5869570cc8Sopenharmony_ci 5969570cc8Sopenharmony_ci bool GetBoolParameter(const std::string &key, bool def) 6069570cc8Sopenharmony_ci { 6169570cc8Sopenharmony_ci return def; 6269570cc8Sopenharmony_ci } 6369570cc8Sopenharmony_ci} // namespace system 6469570cc8Sopenharmony_ci 6569570cc8Sopenharmony_cinamespace Security { 6669570cc8Sopenharmony_ci namespace AccessToken { 6769570cc8Sopenharmony_ci uint64_t TokenIdKit::GetRenderTokenID(uint64_t tokenId) 6869570cc8Sopenharmony_ci { 6969570cc8Sopenharmony_ci return tokenId; 7069570cc8Sopenharmony_ci } 7169570cc8Sopenharmony_ci } // namespace AccessToken 7269570cc8Sopenharmony_ci} // namespace Security 7369570cc8Sopenharmony_ci} // namespace OHOS 7469570cc8Sopenharmony_ci 7569570cc8Sopenharmony_ci#ifdef WITH_SELINUX 7669570cc8Sopenharmony_ciHapContext::HapContext() {} 7769570cc8Sopenharmony_ciHapContext::~HapContext() {} 7869570cc8Sopenharmony_ciint HapContext::HapDomainSetcontext(HapDomainInfo &hapDomainInfo) 7969570cc8Sopenharmony_ci{ 8069570cc8Sopenharmony_ci return 0; 8169570cc8Sopenharmony_ci} 8269570cc8Sopenharmony_ci#endif 8369570cc8Sopenharmony_ci 8469570cc8Sopenharmony_ci#ifdef __cplusplus 8569570cc8Sopenharmony_ciextern "C" { 8669570cc8Sopenharmony_ci#endif 8769570cc8Sopenharmony_civoid ResetParamSecurityLabel() {} 8869570cc8Sopenharmony_ci 8969570cc8Sopenharmony_ciint SetSelfTokenID(uint64_t tokenId) 9069570cc8Sopenharmony_ci{ 9169570cc8Sopenharmony_ci return 0; 9269570cc8Sopenharmony_ci} 9369570cc8Sopenharmony_ci 9469570cc8Sopenharmony_civoid SetTraceDisabled(int disable) {} 9569570cc8Sopenharmony_ci 9669570cc8Sopenharmony_ci#ifdef WITH_SECCOMP 9769570cc8Sopenharmony_cibool SetSeccompPolicyWithName(SeccompFilterType filter, const char *filterName) 9869570cc8Sopenharmony_ci{ 9969570cc8Sopenharmony_ci static int result = 0; 10069570cc8Sopenharmony_ci result++; 10169570cc8Sopenharmony_ci return true; // (result % 3) == 0; // 3 is test data 10269570cc8Sopenharmony_ci} 10369570cc8Sopenharmony_ci 10469570cc8Sopenharmony_cibool IsEnableSeccomp(void) 10569570cc8Sopenharmony_ci{ 10669570cc8Sopenharmony_ci return true; 10769570cc8Sopenharmony_ci} 10869570cc8Sopenharmony_ci#endif 10969570cc8Sopenharmony_ci 11069570cc8Sopenharmony_ciint GetControlSocket(const char *name) 11169570cc8Sopenharmony_ci{ 11269570cc8Sopenharmony_ci return -1; 11369570cc8Sopenharmony_ci} 11469570cc8Sopenharmony_ci 11569570cc8Sopenharmony_cistatic bool g_developerMode = true; 11669570cc8Sopenharmony_civoid SetDeveloperMode(bool mode) 11769570cc8Sopenharmony_ci{ 11869570cc8Sopenharmony_ci g_developerMode = mode; 11969570cc8Sopenharmony_ci} 12069570cc8Sopenharmony_ci 12169570cc8Sopenharmony_ciint GetParameter(const char *key, const char *def, char *value, uint32_t len) 12269570cc8Sopenharmony_ci{ 12369570cc8Sopenharmony_ci static uint32_t count = 0; 12469570cc8Sopenharmony_ci count++; 12569570cc8Sopenharmony_ci if (strcmp(key, "startup.appspawn.cold.boot") == 0) { 12669570cc8Sopenharmony_ci return strcpy_s(value, len, "true") == 0 ? strlen("true") : -1; 12769570cc8Sopenharmony_ci } 12869570cc8Sopenharmony_ci if (strcmp(key, "persist.appspawn.reqMgr.timeout") == 0) { 12969570cc8Sopenharmony_ci const char *tmp = def; 13069570cc8Sopenharmony_ci if ((count % 3) == 0) { // 3 test 13169570cc8Sopenharmony_ci return -1; 13269570cc8Sopenharmony_ci } else if ((count % 3) == 1) { // 3 test 13369570cc8Sopenharmony_ci tmp = "a"; 13469570cc8Sopenharmony_ci } else { 13569570cc8Sopenharmony_ci tmp = "5"; 13669570cc8Sopenharmony_ci } 13769570cc8Sopenharmony_ci return strcpy_s(value, len, tmp) == 0 ? strlen(tmp) : -1; 13869570cc8Sopenharmony_ci } 13969570cc8Sopenharmony_ci if (strcmp(key, "const.security.developermode.state") == 0) { 14069570cc8Sopenharmony_ci return g_developerMode ? (strcpy_s(value, len, "true") == 0 ? strlen("true") : -1) : -1; 14169570cc8Sopenharmony_ci } 14269570cc8Sopenharmony_ci if (strcmp(key, "persist.nweb.sandbox.src_path") == 0) { 14369570cc8Sopenharmony_ci return strcpy_s(value, len, def) == 0 ? strlen(def) : -1; 14469570cc8Sopenharmony_ci } 14569570cc8Sopenharmony_ci if (strcmp(key, "test.variable.001") == 0) { 14669570cc8Sopenharmony_ci return strcpy_s(value, len, "test.variable.001") == 0 ? strlen("test.variable.001") : -1; 14769570cc8Sopenharmony_ci } 14869570cc8Sopenharmony_ci if (strcmp(key, "persist.arkwebcore.package_name") == 0) { 14969570cc8Sopenharmony_ci return strcpy_s(value, len, "com.ohos.arkwebcore") == 0 ? strlen("com.ohos.arkwebcore") : -1; 15069570cc8Sopenharmony_ci } 15169570cc8Sopenharmony_ci return -1; 15269570cc8Sopenharmony_ci} 15369570cc8Sopenharmony_ci 15469570cc8Sopenharmony_ciint SetParameter(const char *key, const char *value) 15569570cc8Sopenharmony_ci{ 15669570cc8Sopenharmony_ci return 0; 15769570cc8Sopenharmony_ci} 15869570cc8Sopenharmony_ci 15969570cc8Sopenharmony_ciint InUpdaterMode(void) 16069570cc8Sopenharmony_ci{ 16169570cc8Sopenharmony_ci return 0; 16269570cc8Sopenharmony_ci} 16369570cc8Sopenharmony_ci 16469570cc8Sopenharmony_ci 16569570cc8Sopenharmony_ci#ifdef __cplusplus 16669570cc8Sopenharmony_ci} 16769570cc8Sopenharmony_ci#endif 168