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

Commit bc56e7dc authored by Calin Juravle's avatar Calin Juravle
Browse files

Create primary profile file together with app data folders

Bug: 28785119
Bug: 28625993
Change-Id: I12c0de85bc3dc35199acf32c10fe69f93e76d7fc
parent 7443c1f2
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -69,6 +69,12 @@ static bool property_get_bool(const char* property_name, bool default_value = fa
    return strcmp(tmp_property_value, "true") == 0;
}

// Keep profile paths in sync with ActivityThread.
constexpr const char* PRIMARY_PROFILE_NAME = "primary.prof";
static std::string create_primary_profile(const std::string& profile_dir) {
    return StringPrintf("%s/%s", profile_dir.c_str(), PRIMARY_PROFILE_NAME);
}

int create_app_data(const char *uuid, const char *pkgname, userid_t userid, int flags,
        appid_t appid, const char* seinfo, int target_sdk_version) {
    uid_t uid = multiuser_get_uid(userid, appid);
@@ -104,6 +110,12 @@ int create_app_data(const char *uuid, const char *pkgname, userid_t userid, int
                PLOG(ERROR) << "Failed to prepare " << profile_path;
                return -1;
            }
            std::string profile_file = create_primary_profile(profile_path);
            // read-write only for the app user.
            if (fs_prepare_file_strict(profile_file.c_str(), 0600, uid, uid) != 0) {
                PLOG(ERROR) << "Failed to prepare " << profile_path;
                return -1;
            }
            const std::string ref_profile_path = create_data_ref_profile_package_path(pkgname);
            // dex2oat/profman runs under the shared app gid and it needs to read/write reference
            // profiles.
@@ -156,12 +168,6 @@ int migrate_app_data(const char *uuid, const char *pkgname, userid_t userid, int
    return 0;
}

// Keep profile paths in sync with ActivityThread.
constexpr const char* PRIMARY_PROFILE_NAME = "primary.prof";
static std::string create_primary_profile(const std::string& profile_dir) {
    return StringPrintf("%s/%s", profile_dir.c_str(), PRIMARY_PROFILE_NAME);
}

static bool clear_profile(const std::string& profile) {
    base::unique_fd ufd(open(profile.c_str(), O_WRONLY | O_NOFOLLOW | O_CLOEXEC));
    if (ufd.get() < 0) {