diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-08-05 15:45:34 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-08-05 15:45:34 -0700 |
commit | b13f32c0a08110fba1249bd534cb12333c311bef (patch) | |
tree | 17d60c2e3d3b3b92d7a0a29806554b811965b854 /services/java/com/android/server/PackageManagerService.java | |
parent | d41ba666d12a24ee4624ea9a009151e6165e3775 (diff) | |
parent | 8b2cdcd184acfebfb245b15a71f5f1c32e53b050 (diff) | |
download | frameworks_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.java | 25 |
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) { |