From f657b63c1c20252e1b0eb0646efb479420c828be Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Mon, 22 Mar 2010 18:08:07 -0700 Subject: [PATCH] Fix restoring of permissions after a reboot. It turns out the whole loadedPermissions thing was pointless at this point, and causing the problem: we would write out the granted permissions, then at boot load them into loaded permissions, and never actually put them in granted. Just remove loadedPermissions. The grantedPermissions (that is the permissions the user has approved be granted to the app) are all we care about. Change-Id: I54d9dc418d6277ae0b35b8c1fc4b9c11f34f86f0 --- .../android/server/PackageManagerService.java | 28 ++++--------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index 9eb63a65d419c..f9e19630abb6c 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -3977,7 +3977,7 @@ class PackageManagerService extends IPackageManager.Stub { && ps.permissionsFixed) { // If this is an existing, non-system package, then // we can't add any new permissions to it. - if (!allowedSig && !gp.loadedPermissions.contains(perm)) { + if (!allowedSig && !gp.grantedPermissions.contains(perm)) { allowed = false; // Except... if this is a permission that was added // to the platform (note: need to only do this when @@ -3989,7 +3989,7 @@ class PackageManagerService extends IPackageManager.Stub { if (npi.name.equals(perm) && pkg.applicationInfo.targetSdkVersion < npi.sdkVersion) { allowed = true; - Log.i(TAG, "Auto-granting WRITE_EXTERNAL_STORAGE to old pkg " + Log.i(TAG, "Auto-granting " + perm + " to old pkg " + pkg.packageName); break; } @@ -4037,7 +4037,6 @@ class PackageManagerService extends IPackageManager.Stub { // permissions we have now selected are fixed until explicitly // changed. ps.permissionsFixed = true; - gp.loadedPermissions = new HashSet(gp.grantedPermissions); } } @@ -6948,12 +6947,6 @@ class PackageManagerService extends IPackageManager.Stub { pw.print(" "); pw.println(s); } } - if (ps.loadedPermissions.size() > 0) { - pw.println(" loadedPermissions:"); - for (String s : ps.loadedPermissions) { - pw.print(" "); pw.println(s); - } - } } } printedSomething = false; @@ -7022,10 +7015,6 @@ class PackageManagerService extends IPackageManager.Stub { for (String s : su.grantedPermissions) { pw.print(" "); pw.println(s); } - pw.println(" loadedPermissions:"); - for (String s : su.loadedPermissions) { - pw.print(" "); pw.println(s); - } } } @@ -7528,8 +7517,6 @@ class PackageManagerService extends IPackageManager.Stub { HashSet grantedPermissions = new HashSet(); int[] gids; - HashSet loadedPermissions = new HashSet(); - GrantedPermissions(int pkgFlags) { setFlags(pkgFlags); } @@ -7629,7 +7616,6 @@ class PackageManagerService extends IPackageManager.Stub { public void copyFrom(PackageSettingBase base) { grantedPermissions = base.grantedPermissions; gids = base.gids; - loadedPermissions = base.loadedPermissions; timeStamp = base.timeStamp; timeStampString = base.timeStampString; @@ -8063,7 +8049,6 @@ class PackageManagerService extends IPackageManager.Stub { p.userId = dis.userId; // Clone permissions p.grantedPermissions = new HashSet(dis.grantedPermissions); - p.loadedPermissions = new HashSet(dis.loadedPermissions); // Clone component info p.disabledComponents = new HashSet(dis.disabledComponents); p.enabledComponents = new HashSet(dis.enabledComponents); @@ -8168,7 +8153,7 @@ class PackageManagerService extends IPackageManager.Stub { } for (PackageSetting pkg:sus.packages) { if (pkg.pkg != null && - !pkg.pkg.packageName.equalsIgnoreCase(deletedPs.pkg.packageName) && + !pkg.pkg.packageName.equals(deletedPs.pkg.packageName) && pkg.pkg.requestedPermissions.contains(eachPerm)) { used = true; break; @@ -8177,7 +8162,6 @@ class PackageManagerService extends IPackageManager.Stub { if (!used) { // can safely delete this permission from list sus.grantedPermissions.remove(eachPerm); - sus.loadedPermissions.remove(eachPerm); } } // Update gids @@ -9052,7 +9036,7 @@ class PackageManagerService extends IPackageManager.Stub { packageSetting.signatures.readXml(parser, mPastSignatures); } else if (tagName.equals("perms")) { readGrantedPermissionsLP(parser, - packageSetting.loadedPermissions); + packageSetting.grantedPermissions); packageSetting.permissionsFixed = true; } else { reportSettingsProblem(Log.WARN, @@ -9181,7 +9165,7 @@ class PackageManagerService extends IPackageManager.Stub { if (tagName.equals("sigs")) { su.signatures.readXml(parser, mPastSignatures); } else if (tagName.equals("perms")) { - readGrantedPermissionsLP(parser, su.loadedPermissions); + readGrantedPermissionsLP(parser, su.grantedPermissions); } else { reportSettingsProblem(Log.WARN, "Unknown element under : " @@ -9559,8 +9543,6 @@ class PackageManagerService extends IPackageManager.Stub { // Scan the package if (scanPackageLI(pkg, parseFlags, SCAN_MONITOR) != null) { synchronized (mPackages) { - updatePermissionsLP(pkg.packageName, pkg, - pkg.permissions.size() > 0, false); retCode = PackageManager.INSTALL_SUCCEEDED; pkgList.add(pkg.packageName); // Post process args