diff options
| author | 2017-11-28 23:31:46 +0000 | |
|---|---|---|
| committer | 2017-11-28 23:31:46 +0000 | |
| commit | ffaf53ec6e37e90992f024b8da4b12bee550cd67 (patch) | |
| tree | f45bb1c8fa049e141526fd5702466682b00de1c8 /cmds/installd/InstalldNativeService.cpp | |
| parent | 503b79e3db0d6dce40ea0a8e17bbffd6f6176123 (diff) | |
| parent | 7d4ec11b69720fbb166102b9244f293cc359f3a9 (diff) | |
Merge "Add snapshotProfile APIs to installd" am: 98ad260f6b am: 5a49d45535
am: 7d4ec11b69
Change-Id: I19d456c9a1196cb6338ed963d9f1ae5d855b9911
Diffstat (limited to 'cmds/installd/InstalldNativeService.cpp')
| -rw-r--r-- | cmds/installd/InstalldNativeService.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/cmds/installd/InstalldNativeService.cpp b/cmds/installd/InstalldNativeService.cpp index e10fb6c14e..58786f6683 100644 --- a/cmds/installd/InstalldNativeService.cpp +++ b/cmds/installd/InstalldNativeService.cpp @@ -436,7 +436,7 @@ binder::Status InstalldNativeService::createAppData(const std::unique_ptr<std::s // profiles. int shared_app_gid = multiuser_get_shared_gid(0, appId); if ((shared_app_gid != -1) && fs_prepare_dir_strict( - ref_profile_path.c_str(), 0700, shared_app_gid, shared_app_gid) != 0) { + ref_profile_path.c_str(), 0701, shared_app_gid, shared_app_gid) != 0) { return error("Failed to prepare " + ref_profile_path); } } @@ -1833,6 +1833,29 @@ binder::Status InstalldNativeService::mergeProfiles(int32_t uid, const std::stri return ok(); } +binder::Status InstalldNativeService::snapshotProfile(int32_t appId, const std::string& packageName, + const std::string& codePath, bool* _aidl_return) { + ENFORCE_UID(AID_SYSTEM); + CHECK_ARGUMENT_PACKAGE_NAME(packageName); + std::lock_guard<std::recursive_mutex> lock(mLock); + + *_aidl_return = snapshot_profile(appId, packageName, codePath); + return ok(); +} + +binder::Status InstalldNativeService::destroyProfileSnapshot(const std::string& packageName, + const std::string& codePath) { + ENFORCE_UID(AID_SYSTEM); + CHECK_ARGUMENT_PACKAGE_NAME(packageName); + std::lock_guard<std::recursive_mutex> lock(mLock); + + std::string snapshot = create_snapshot_profile_path(packageName, codePath); + if ((unlink(snapshot.c_str()) != 0) && (errno != ENOENT)) { + return error("Failed to destroy profile snapshot for " + packageName + ":" + codePath); + } + return ok(); +} + binder::Status InstalldNativeService::dexopt(const std::string& apkPath, int32_t uid, const std::unique_ptr<std::string>& packageName, const std::string& instructionSet, int32_t dexoptNeeded, const std::unique_ptr<std::string>& outputPath, int32_t dexFlags, |