diff options
author | Suprabh Shukla <suprabh@google.com> | 2017-04-26 14:41:24 -0700 |
---|---|---|
committer | Suprabh Shukla <suprabh@google.com> | 2017-04-26 15:08:11 -0700 |
commit | 56a3c70d9c3745067d52908d097e23137506679d (patch) | |
tree | 7c697b5ba867e6a6fb029a78d63d5960455ca5b5 /src/com/android/packageinstaller/InstallStart.java | |
parent | ef54ec214414fa17bc2ada601fc2284d00b3804d (diff) | |
download | android_packages_apps_PackageInstaller-56a3c70d9c3745067d52908d097e23137506679d.tar.gz android_packages_apps_PackageInstaller-56a3c70d9c3745067d52908d097e23137506679d.tar.bz2 android_packages_apps_PackageInstaller-56a3c70d9c3745067d52908d097e23137506679d.zip |
Exempting privileged apps from permission check in package installer
If a privileged app does want to be treated as a trusted source, it can
pass in the extra EXTRA_NOT_UNKNOWN_SOURCE and does not need to declare
the permission REQUEST_INSTALL_PACKAGES. In such a case it will not be
shown in the list under settings to the user.
Test: Manually tested that sync auth successfully installs dpc during
profile provisioning flow
Bug: 37623444
Change-Id: I70083980f3b8e43de78d2f1a781d55e19fdc00ee
Diffstat (limited to 'src/com/android/packageinstaller/InstallStart.java')
-rw-r--r-- | src/com/android/packageinstaller/InstallStart.java | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/com/android/packageinstaller/InstallStart.java b/src/com/android/packageinstaller/InstallStart.java index 36161636..80691f28 100644 --- a/src/com/android/packageinstaller/InstallStart.java +++ b/src/com/android/packageinstaller/InstallStart.java @@ -64,10 +64,15 @@ public class InstallStart extends Activity { callingPackage = (sessionInfo != null) ? sessionInfo.getInstallerPackageName() : null; } - ApplicationInfo sourceInfo = getSourceInfo(callingPackage); + final ApplicationInfo sourceInfo = getSourceInfo(callingPackage); final int originatingUid = getOriginatingUid(sourceInfo); + boolean isTrustedSource = false; + if (sourceInfo != null + && (sourceInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0) { + isTrustedSource = intent.getBooleanExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, false); + } - if (originatingUid != PackageInstaller.SessionParams.UID_UNKNOWN) { + if (!isTrustedSource && originatingUid != PackageInstaller.SessionParams.UID_UNKNOWN) { final int targetSdkVersion = getMaxTargetSdkVersionForUid(originatingUid); if (targetSdkVersion < 0) { Log.w(LOG_TAG, "Cannot get target sdk version for uid " + originatingUid); |