diff options
author | Christopher Tate <ctate@google.com> | 2014-06-12 18:37:28 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-06-12 18:37:28 +0000 |
commit | 93e9e7208e0de349a9592ac59153d6b06c202fe6 (patch) | |
tree | d9a55ebdddd445da53e509c2872e1238abcd5208 /services/core | |
parent | 02a9c359a1a6e1175cdd2d560f97be9cdb816a0e (diff) | |
parent | f9fcfaae78afb0bc3e6a0716ad1d5fe3561bb81e (diff) | |
download | frameworks_base-93e9e7208e0de349a9592ac59153d6b06c202fe6.zip frameworks_base-93e9e7208e0de349a9592ac59153d6b06c202fe6.tar.gz frameworks_base-93e9e7208e0de349a9592ac59153d6b06c202fe6.tar.bz2 |
am ba6e8ae5: Merge "Relax duplicate-permission-definition constraints slightly" into lmp-preview-dev
* commit 'ba6e8ae5d2a364799fd6bc84179e33b6731e574b':
Relax duplicate-permission-definition constraints slightly
Diffstat (limited to 'services/core')
-rwxr-xr-x | services/core/java/com/android/server/pm/PackageManagerService.java | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 6cfcbdc..49502b6 100755 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -10266,7 +10266,7 @@ public class PackageManagerService extends IPackageManager.Stub { synchronized (mPackages) { // Check whether the newly-scanned package wants to define an already-defined perm int N = pkg.permissions.size(); - for (int i = 0; i < N; i++) { + for (int i = N-1; i >= 0; i--) { PackageParser.Permission perm = pkg.permissions.get(i); BasePermission bp = mSettings.mPermissions.get(perm.info.name); if (bp != null) { @@ -10274,13 +10274,23 @@ public class PackageManagerService extends IPackageManager.Stub { // also includes the "updating the same package" case, of course. if (compareSignatures(bp.packageSetting.signatures.mSignatures, pkg.mSignatures) != PackageManager.SIGNATURE_MATCH) { - Slog.w(TAG, "Package " + pkg.packageName - + " attempting to redeclare permission " + perm.info.name - + " already owned by " + bp.sourcePackage); - res.returnCode = PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION; - res.origPermission = perm.info.name; - res.origPackage = bp.sourcePackage; - return; + // If the owning package is the system itself, we log but allow + // install to proceed; we fail the install on all other permission + // redefinitions. + if (!bp.sourcePackage.equals("android")) { + Slog.w(TAG, "Package " + pkg.packageName + + " attempting to redeclare permission " + perm.info.name + + " already owned by " + bp.sourcePackage); + res.returnCode = PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION; + res.origPermission = perm.info.name; + res.origPackage = bp.sourcePackage; + return; + } else { + Slog.w(TAG, "Package " + pkg.packageName + + " attempting to redeclare system permission " + + perm.info.name + "; ignoring new declaration"); + pkg.permissions.remove(i); + } } } } |