diff options
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) { |