Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 67e929cb authored by Samiul Islam's avatar Samiul Islam Committed by Automerger Merge Worker
Browse files

Merge "Set correct project id for sdk data directories" am: d2ce603b am:...

Merge "Set correct project id for sdk data directories" am: d2ce603b am: a607f48c am: 837d8b54 am: 3598d9e6 am: 2be39f59

Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/2051230



Change-Id: If83ba92206aa2c76a65ed0e5103b21d0618bf9ad
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 1e223c59 2be39f59
Loading
Loading
Loading
Loading
+18 −10
Original line number Original line Diff line number Diff line
@@ -634,7 +634,8 @@ static void chown_app_profile_dir(const std::string &packageName, int32_t appId,


static binder::Status createAppDataDirs(const std::string& path, int32_t uid, int32_t gid,
static binder::Status createAppDataDirs(const std::string& path, int32_t uid, int32_t gid,
                                        int32_t* previousUid, int32_t cacheGid,
                                        int32_t* previousUid, int32_t cacheGid,
                                        const std::string& seInfo, mode_t targetMode) {
                                        const std::string& seInfo, mode_t targetMode,
                                        long projectIdApp, long projectIdCache) {
    struct stat st{};
    struct stat st{};
    bool parent_dir_exists = (stat(path.c_str(), &st) == 0);
    bool parent_dir_exists = (stat(path.c_str(), &st) == 0);


@@ -658,11 +659,9 @@ static binder::Status createAppDataDirs(const std::string& path, int32_t uid, in
    }
    }


    // Prepare only the parent app directory
    // Prepare only the parent app directory
    long project_id_app = get_project_id(uid, PROJECT_ID_APP_START);
    if (prepare_app_dir(path, targetMode, uid, gid, projectIdApp) ||
    long project_id_cache_app = get_project_id(uid, PROJECT_ID_APP_CACHE_START);
        prepare_app_cache_dir(path, "cache", 02771, uid, cacheGid, projectIdCache) ||
    if (prepare_app_dir(path, targetMode, uid, gid, project_id_app) ||
        prepare_app_cache_dir(path, "code_cache", 02771, uid, cacheGid, projectIdCache)) {
        prepare_app_cache_dir(path, "cache", 02771, uid, cacheGid, project_id_cache_app) ||
        prepare_app_cache_dir(path, "code_cache", 02771, uid, cacheGid, project_id_cache_app)) {
        return error("Failed to prepare " + path);
        return error("Failed to prepare " + path);
    }
    }


@@ -718,10 +717,14 @@ binder::Status InstalldNativeService::createAppDataLocked(
        cacheGid = uid;
        cacheGid = uid;
    }
    }


    long projectIdApp = get_project_id(uid, PROJECT_ID_APP_START);
    long projectIdCache = get_project_id(uid, PROJECT_ID_APP_CACHE_START);

    if (flags & FLAG_STORAGE_CE) {
    if (flags & FLAG_STORAGE_CE) {
        auto path = create_data_user_ce_package_path(uuid_, userId, pkgname);
        auto path = create_data_user_ce_package_path(uuid_, userId, pkgname);


        auto status = createAppDataDirs(path, uid, uid, &previousUid, cacheGid, seInfo, targetMode);
        auto status = createAppDataDirs(path, uid, uid, &previousUid, cacheGid, seInfo, targetMode,
                                        projectIdApp, projectIdCache);
        if (!status.isOk()) {
        if (!status.isOk()) {
            return status;
            return status;
        }
        }
@@ -746,7 +749,8 @@ binder::Status InstalldNativeService::createAppDataLocked(
    if (flags & FLAG_STORAGE_DE) {
    if (flags & FLAG_STORAGE_DE) {
        auto path = create_data_user_de_package_path(uuid_, userId, pkgname);
        auto path = create_data_user_de_package_path(uuid_, userId, pkgname);


        auto status = createAppDataDirs(path, uid, uid, &previousUid, cacheGid, seInfo, targetMode);
        auto status = createAppDataDirs(path, uid, uid, &previousUid, cacheGid, seInfo, targetMode,
                                        projectIdApp, projectIdCache);
        if (!status.isOk()) {
        if (!status.isOk()) {
            return status;
            return status;
        }
        }
@@ -946,8 +950,12 @@ binder::Status InstalldNativeService::reconcileSdkData(const std::optional<std::
            }
            }
            const int32_t sandboxUid = multiuser_get_sdk_sandbox_uid(userId, appId);
            const int32_t sandboxUid = multiuser_get_sdk_sandbox_uid(userId, appId);
            int32_t previousSandboxUid = multiuser_get_sdk_sandbox_uid(userId, previousAppId);
            int32_t previousSandboxUid = multiuser_get_sdk_sandbox_uid(userId, previousAppId);
            auto status = createAppDataDirs(path, sandboxUid, AID_NOBODY, &previousSandboxUid,
            int32_t appUid = multiuser_get_uid(userId, appId);
                                            cacheGid, seInfo, 0700 | S_ISGID);
            long projectIdApp = get_project_id(appUid, PROJECT_ID_APP_START);
            long projectIdCache = get_project_id(appUid, PROJECT_ID_APP_CACHE_START);
            auto status =
                    createAppDataDirs(path, sandboxUid, AID_NOBODY, &previousSandboxUid, cacheGid,
                                      seInfo, 0700 | S_ISGID, projectIdApp, projectIdCache);
            if (!status.isOk()) {
            if (!status.isOk()) {
                res = status;
                res = status;
                continue;
                continue;