diff options
| author | 2016-06-02 10:10:35 +0000 | |
|---|---|---|
| committer | 2016-06-02 10:10:37 +0000 | |
| commit | d25aab3ce8aab1b95ac60922981c87c6963a0a6b (patch) | |
| tree | 2598f2d087ede5c0d2d68dcab55c04d2ceb50a67 | |
| parent | 6727c2d0bfc876c62d6ee60d8a05d26bef1d56ef (diff) | |
| parent | bc56e7dcf07e633867e1525435373a1231216b22 (diff) | |
Merge "Create primary profile file together with app data folders" into nyc-dev
| -rw-r--r-- | cmds/installd/commands.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/cmds/installd/commands.cpp b/cmds/installd/commands.cpp index 55e9521317..c0c91da2eb 100644 --- a/cmds/installd/commands.cpp +++ b/cmds/installd/commands.cpp @@ -70,6 +70,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); @@ -105,6 +111,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. @@ -157,12 +169,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) { |