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