Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 819d2745 authored by Todd Kennedy's avatar Todd Kennedy
Browse files

Update PackageInstaller install handing

* Allow forcing permission check. We want to modify the PackageInstaller to
use the PackageInstallerSession for better security / remove deprecated APIs.
In order to do this and continue to prompt for permissions, we need to prevent
the PakcageInstaller from auto-approving the permissions.

* Add originating UID to SessionParams. This is used for package verifier
checks.

Bug: 22282121
Change-Id: I19079749d20ace66f1332f399d52cb0fb8784cd9
parent d1240219
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -9167,6 +9167,7 @@ package android.content.pm {
    method public void setAppLabel(java.lang.CharSequence);
    method public void setAppLabel(java.lang.CharSequence);
    method public void setAppPackageName(java.lang.String);
    method public void setAppPackageName(java.lang.String);
    method public void setInstallLocation(int);
    method public void setInstallLocation(int);
    method public void setOriginatingUid(int);
    method public void setOriginatingUri(android.net.Uri);
    method public void setOriginatingUri(android.net.Uri);
    method public void setReferrerUri(android.net.Uri);
    method public void setReferrerUri(android.net.Uri);
    method public void setSize(long);
    method public void setSize(long);
+1 −0
Original line number Original line Diff line number Diff line
@@ -9451,6 +9451,7 @@ package android.content.pm {
    method public void setAppPackageName(java.lang.String);
    method public void setAppPackageName(java.lang.String);
    method public void setGrantedRuntimePermissions(java.lang.String[]);
    method public void setGrantedRuntimePermissions(java.lang.String[]);
    method public void setInstallLocation(int);
    method public void setInstallLocation(int);
    method public void setOriginatingUid(int);
    method public void setOriginatingUri(android.net.Uri);
    method public void setOriginatingUri(android.net.Uri);
    method public void setReferrerUri(android.net.Uri);
    method public void setReferrerUri(android.net.Uri);
    method public void setSize(long);
    method public void setSize(long);
+22 −0
Original line number Original line Diff line number Diff line
@@ -867,6 +867,9 @@ public class PackageInstaller {
         */
         */
        public static final int MODE_INHERIT_EXISTING = 2;
        public static final int MODE_INHERIT_EXISTING = 2;


        /** {@hide} */
        public static final int UID_UNKNOWN = -1;

        /** {@hide} */
        /** {@hide} */
        public int mode = MODE_INVALID;
        public int mode = MODE_INVALID;
        /** {@hide} */
        /** {@hide} */
@@ -886,6 +889,8 @@ public class PackageInstaller {
        /** {@hide} */
        /** {@hide} */
        public Uri originatingUri;
        public Uri originatingUri;
        /** {@hide} */
        /** {@hide} */
        public int originatingUid = UID_UNKNOWN;
        /** {@hide} */
        public Uri referrerUri;
        public Uri referrerUri;
        /** {@hide} */
        /** {@hide} */
        public String abiOverride;
        public String abiOverride;
@@ -915,6 +920,7 @@ public class PackageInstaller {
            appIcon = source.readParcelable(null);
            appIcon = source.readParcelable(null);
            appLabel = source.readString();
            appLabel = source.readString();
            originatingUri = source.readParcelable(null);
            originatingUri = source.readParcelable(null);
            originatingUid = source.readInt();
            referrerUri = source.readParcelable(null);
            referrerUri = source.readParcelable(null);
            abiOverride = source.readString();
            abiOverride = source.readString();
            volumeUuid = source.readString();
            volumeUuid = source.readString();
@@ -982,6 +988,15 @@ public class PackageInstaller {
            this.originatingUri = originatingUri;
            this.originatingUri = originatingUri;
        }
        }


        /**
         * Sets the UID that initiated package installation. Used for verification purposes.
         *
         * @see PackageManager#EXTRA_VERIFICATION_INSTALLER_UID
         */
        public void setOriginatingUid(int originatingUid) {
            this.originatingUid = originatingUid;
        }

        /**
        /**
         * Optionally set the URI that referred you to install this package. Used
         * Optionally set the URI that referred you to install this package. Used
         * for verification purposes.
         * for verification purposes.
@@ -1021,6 +1036,11 @@ public class PackageInstaller {
            installFlags &= ~PackageManager.INSTALL_INTERNAL;
            installFlags &= ~PackageManager.INSTALL_INTERNAL;
        }
        }


        /** {@hide} */
        public void setInstallFlagsForcePermissionPrompt() {
            installFlags |= PackageManager.INSTALL_FORCE_PERMISSION_PROMPT;
        }

        /** {@hide} */
        /** {@hide} */
        public void dump(IndentingPrintWriter pw) {
        public void dump(IndentingPrintWriter pw) {
            pw.printPair("mode", mode);
            pw.printPair("mode", mode);
@@ -1031,6 +1051,7 @@ public class PackageInstaller {
            pw.printPair("appIcon", (appIcon != null));
            pw.printPair("appIcon", (appIcon != null));
            pw.printPair("appLabel", appLabel);
            pw.printPair("appLabel", appLabel);
            pw.printPair("originatingUri", originatingUri);
            pw.printPair("originatingUri", originatingUri);
            pw.printPair("originatingUid", originatingUid);
            pw.printPair("referrerUri", referrerUri);
            pw.printPair("referrerUri", referrerUri);
            pw.printPair("abiOverride", abiOverride);
            pw.printPair("abiOverride", abiOverride);
            pw.printPair("volumeUuid", volumeUuid);
            pw.printPair("volumeUuid", volumeUuid);
@@ -1053,6 +1074,7 @@ public class PackageInstaller {
            dest.writeParcelable(appIcon, flags);
            dest.writeParcelable(appIcon, flags);
            dest.writeString(appLabel);
            dest.writeString(appLabel);
            dest.writeParcelable(originatingUri, flags);
            dest.writeParcelable(originatingUri, flags);
            dest.writeInt(originatingUid);
            dest.writeParcelable(referrerUri, flags);
            dest.writeParcelable(referrerUri, flags);
            dest.writeString(abiOverride);
            dest.writeString(abiOverride);
            dest.writeString(volumeUuid);
            dest.writeString(volumeUuid);
+9 −0
Original line number Original line Diff line number Diff line
@@ -421,6 +421,15 @@ public abstract class PackageManager {
    /** {@hide} */
    /** {@hide} */
    public static final int INSTALL_FORCE_VOLUME_UUID = 0x00000200;
    public static final int INSTALL_FORCE_VOLUME_UUID = 0x00000200;


    /**
     * Flag parameter for {@link #installPackage} to indicate that we always want to force
     * the prompt for permission approval. This overrides any special behaviour for internal
     * components.
     *
     * @hide
     */
    public static final int INSTALL_FORCE_PERMISSION_PROMPT = 0x00000400;

    /**
    /**
     * Flag parameter for
     * Flag parameter for
     * {@link #setComponentEnabledSetting(android.content.ComponentName, int, int)} to indicate
     * {@link #setComponentEnabledSetting(android.content.ComponentName, int, int)} to indicate
+4 −0
Original line number Original line Diff line number Diff line
@@ -140,6 +140,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
    private static final String ATTR_APP_ICON = "appIcon";
    private static final String ATTR_APP_ICON = "appIcon";
    private static final String ATTR_APP_LABEL = "appLabel";
    private static final String ATTR_APP_LABEL = "appLabel";
    private static final String ATTR_ORIGINATING_URI = "originatingUri";
    private static final String ATTR_ORIGINATING_URI = "originatingUri";
    private static final String ATTR_ORIGINATING_UID = "originatingUid";
    private static final String ATTR_REFERRER_URI = "referrerUri";
    private static final String ATTR_REFERRER_URI = "referrerUri";
    private static final String ATTR_ABI_OVERRIDE = "abiOverride";
    private static final String ATTR_ABI_OVERRIDE = "abiOverride";
    private static final String ATTR_VOLUME_UUID = "volumeUuid";
    private static final String ATTR_VOLUME_UUID = "volumeUuid";
@@ -405,6 +406,8 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
        params.appIcon = readBitmapAttribute(in, ATTR_APP_ICON);
        params.appIcon = readBitmapAttribute(in, ATTR_APP_ICON);
        params.appLabel = readStringAttribute(in, ATTR_APP_LABEL);
        params.appLabel = readStringAttribute(in, ATTR_APP_LABEL);
        params.originatingUri = readUriAttribute(in, ATTR_ORIGINATING_URI);
        params.originatingUri = readUriAttribute(in, ATTR_ORIGINATING_URI);
        params.originatingUid =
                readIntAttribute(in, ATTR_ORIGINATING_UID, SessionParams.UID_UNKNOWN);
        params.referrerUri = readUriAttribute(in, ATTR_REFERRER_URI);
        params.referrerUri = readUriAttribute(in, ATTR_REFERRER_URI);
        params.abiOverride = readStringAttribute(in, ATTR_ABI_OVERRIDE);
        params.abiOverride = readStringAttribute(in, ATTR_ABI_OVERRIDE);
        params.volumeUuid = readStringAttribute(in, ATTR_VOLUME_UUID);
        params.volumeUuid = readStringAttribute(in, ATTR_VOLUME_UUID);
@@ -477,6 +480,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
        writeStringAttribute(out, ATTR_APP_PACKAGE_NAME, params.appPackageName);
        writeStringAttribute(out, ATTR_APP_PACKAGE_NAME, params.appPackageName);
        writeStringAttribute(out, ATTR_APP_LABEL, params.appLabel);
        writeStringAttribute(out, ATTR_APP_LABEL, params.appLabel);
        writeUriAttribute(out, ATTR_ORIGINATING_URI, params.originatingUri);
        writeUriAttribute(out, ATTR_ORIGINATING_URI, params.originatingUri);
        writeIntAttribute(out, ATTR_ORIGINATING_UID, params.originatingUid);
        writeUriAttribute(out, ATTR_REFERRER_URI, params.referrerUri);
        writeUriAttribute(out, ATTR_REFERRER_URI, params.referrerUri);
        writeStringAttribute(out, ATTR_ABI_OVERRIDE, params.abiOverride);
        writeStringAttribute(out, ATTR_ABI_OVERRIDE, params.abiOverride);
        writeStringAttribute(out, ATTR_VOLUME_UUID, params.volumeUuid);
        writeStringAttribute(out, ATTR_VOLUME_UUID, params.volumeUuid);
Loading