summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/PackageManagerService.java
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-08-05 15:45:34 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2009-08-05 15:45:34 -0700
commitb13f32c0a08110fba1249bd534cb12333c311bef (patch)
tree17d60c2e3d3b3b92d7a0a29806554b811965b854 /services/java/com/android/server/PackageManagerService.java
parentd41ba666d12a24ee4624ea9a009151e6165e3775 (diff)
parent8b2cdcd184acfebfb245b15a71f5f1c32e53b050 (diff)
downloadframeworks_base-b13f32c0a08110fba1249bd534cb12333c311bef.zip
frameworks_base-b13f32c0a08110fba1249bd534cb12333c311bef.tar.gz
frameworks_base-b13f32c0a08110fba1249bd534cb12333c311bef.tar.bz2
am 8b2cdcd1: Merge change 20037 into donut
Merge commit '8b2cdcd184acfebfb245b15a71f5f1c32e53b050' * commit '8b2cdcd184acfebfb245b15a71f5f1c32e53b050': fix issue with gids not being added for packages with shared user id
Diffstat (limited to 'services/java/com/android/server/PackageManagerService.java')
-rw-r--r--services/java/com/android/server/PackageManagerService.java25
1 files changed, 17 insertions, 8 deletions
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 9e8816b..e14f805 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -2887,7 +2887,7 @@ class PackageManagerService extends IPackageManager.Stub {
if (gp.gids == null) {
gp.gids = mGlobalGids;
}
-
+
final int N = pkg.requestedPermissions.size();
for (int i=0; i<N; i++) {
String name = pkg.requestedPermissions.get(i);
@@ -3758,7 +3758,7 @@ class PackageManagerService extends IPackageManager.Stub {
}
}
}
-
+
private void updateSettingsLI(String pkgName, File tmpPackageFile,
String destFilePath, File destPackageFile,
File destResourceFile,
@@ -4223,7 +4223,7 @@ class PackageManagerService extends IPackageManager.Stub {
synchronized (mPackages) {
if ( (deletedPs != null) && (deletedPs.sharedUser != null)) {
// remove permissions associated with package
- mSettings.updateSharedUserPerms (deletedPs);
+ mSettings.updateSharedUserPermsLP(deletedPs, mGlobalGids);
}
// Save settings now
mSettings.writeLP ();
@@ -6011,7 +6011,15 @@ class PackageManagerService extends IPackageManager.Stub {
}
}
- private void updateSharedUserPerms (PackageSetting deletedPs) {
+ /*
+ * Update the shared user setting when a package using
+ * specifying the shared user id is removed. The gids
+ * associated with each permission of the deleted package
+ * are removed from the shared user's gid list only if its
+ * not in use by other permissions of packages in the
+ * shared user setting.
+ */
+ private void updateSharedUserPermsLP(PackageSetting deletedPs, int[] globalGids) {
if ( (deletedPs == null) || (deletedPs.pkg == null)) {
Log.i(TAG, "Trying to update info for null package. Just ignoring");
return;
@@ -6040,13 +6048,14 @@ class PackageManagerService extends IPackageManager.Stub {
}
}
// Update gids
- int newGids[] = null;
- for (PackageSetting pkg:sus.packages) {
- newGids = appendInts(newGids, pkg.gids);
+ int newGids[] = globalGids;
+ for (String eachPerm : sus.grantedPermissions) {
+ BasePermission bp = mPermissions.get(eachPerm);
+ newGids = appendInts(newGids, bp.gids);
}
sus.gids = newGids;
}
-
+
private int removePackageLP(String name) {
PackageSetting p = mPackages.get(name);
if (p != null) {