summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Svetoslav <svetoslavganov@google.com> 2015-04-02 16:51:55 -0700
committer Svetoslav <svetoslavganov@google.com> 2015-04-02 16:52:00 -0700
commitd2cf3aec6087ba53dcbb55eb38c8e7f385ac4cbd (patch)
treed0d493fe16c9047437159436b95b9cf1fb370b98
parent84bf582208142616547a1b0f6b6a01fa3439b098 (diff)
Do not clear a shared user's permissions on an app install.
When regranting permissions for an app during an install if that app is in a shared user we should not clear the permissions as the permissions for the shared user are additive and go away when apps requesting them are uninstalled. bug:20050689 Change-Id: I82aa70669fc25a45e7020a1545b093db5525f5cf
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java6
-rw-r--r--services/core/java/com/android/server/pm/PackageSetting.java4
2 files changed, 8 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index b9dfc2161f94..4752ace95716 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -7397,8 +7397,10 @@ public class PackageManagerService extends IPackageManager.Stub {
if (replace) {
ps.installPermissionsFixed = false;
- origPermissions = new PermissionsState(permissionsState);
- permissionsState.reset();
+ if (!ps.isSharedUser()) {
+ origPermissions = new PermissionsState(permissionsState);
+ permissionsState.reset();
+ }
}
permissionsState.setGlobalGids(mGlobalGids);
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java
index a3f4c0b545bf..e7c0ef765164 100644
--- a/services/core/java/com/android/server/pm/PackageSetting.java
+++ b/services/core/java/com/android/server/pm/PackageSetting.java
@@ -74,4 +74,8 @@ final class PackageSetting extends PackageSettingBase {
public boolean isSystem() {
return (pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0;
}
+
+ public boolean isSharedUser() {
+ return sharedUser != null;
+ }
}