summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorrich cannings <richc@google.com>2012-09-13 13:43:07 -0700
committerrich cannings <richc@google.com>2012-09-14 14:25:52 -0700
commit13d428e8306d1bb1a3017045bc5d2f76edec32df (patch)
tree8e576f447aec8cf0361c3c1e3e23ad3f3f5c7b36 /core
parenta87826c345dbd692a86a340691cf7471a2505809 (diff)
downloadframeworks_base-13d428e8306d1bb1a3017045bc5d2f76edec32df.zip
frameworks_base-13d428e8306d1bb1a3017045bc5d2f76edec32df.tar.gz
frameworks_base-13d428e8306d1bb1a3017045bc5d2f76edec32df.tar.bz2
Send more information to verifiers
Send package name, version code and the uid of the application requesting the install to package verifiers. Bug: 7164155 Change-Id: I2464dc5d4551f60b4f38f7982495a8920c83e1cd
Diffstat (limited to 'core')
-rw-r--r--core/java/android/content/pm/PackageManager.java24
-rw-r--r--core/java/android/content/pm/VerificationParams.java22
-rw-r--r--core/tests/coretests/src/android/content/pm/VerificationParamsTest.java25
3 files changed, 71 insertions, 0 deletions
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 5399583..4784d7f 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -1151,6 +1151,22 @@ public abstract class PackageManager {
= "android.content.pm.extra.VERIFICATION_INSTALL_FLAGS";
/**
+ * Extra field name for the uid of who is requesting to install
+ * the package.
+ *
+ * @hide
+ */
+ public static final String EXTRA_VERIFICATION_INSTALLER_UID
+ = "android.content.pm.extra.VERIFICATION_INSTALLER_UID";
+
+ /**
+ * Extra field name for the package name of a package pending verification.
+ *
+ * @hide
+ */
+ public static final String EXTRA_VERIFICATION_PACKAGE_NAME
+ = "android.content.pm.extra.VERIFICATION_PACKAGE_NAME";
+ /**
* Extra field name for the result of a verification, either
* {@link #VERIFICATION_ALLOW}, or {@link #VERIFICATION_REJECT}.
* Passed to package verifiers after a package is verified.
@@ -1159,6 +1175,14 @@ public abstract class PackageManager {
= "android.content.pm.extra.VERIFICATION_RESULT";
/**
+ * Extra field name for the version code of a package pending verification.
+ *
+ * @hide
+ */
+ public static final String EXTRA_VERIFICATION_VERSION_CODE
+ = "android.content.pm.extra.VERIFICATION_VERSION_CODE";
+
+ /**
* Retrieve overall information about an application package that is
* installed on the system.
* <p>
diff --git a/core/java/android/content/pm/VerificationParams.java b/core/java/android/content/pm/VerificationParams.java
index 9bec87e..6454de0 100644
--- a/core/java/android/content/pm/VerificationParams.java
+++ b/core/java/android/content/pm/VerificationParams.java
@@ -39,6 +39,9 @@ public class VerificationParams implements Parcelable {
/** HTTP referrer URI associated with the originatingURI. */
private final Uri mReferrer;
+ /** UID of application requesting the install */
+ private int mInstallerUid;
+
/**
* An object that holds the digest of the package which can be used to
* verify ownership.
@@ -63,6 +66,7 @@ public class VerificationParams implements Parcelable {
mOriginatingURI = originatingURI;
mReferrer = referrer;
mManifestDigest = manifestDigest;
+ mInstallerUid = -1;
}
public Uri getVerificationURI() {
@@ -81,6 +85,15 @@ public class VerificationParams implements Parcelable {
return mManifestDigest;
}
+ /** @return -1 when not set */
+ public int getInstallerUid() {
+ return mInstallerUid;
+ }
+
+ public void setInstallerUid(int uid) {
+ mInstallerUid = uid;
+ }
+
@Override
public int describeContents() {
return 0;
@@ -126,6 +139,10 @@ public class VerificationParams implements Parcelable {
return false;
}
+ if (mInstallerUid != other.mInstallerUid) {
+ return false;
+ }
+
return true;
}
@@ -137,6 +154,7 @@ public class VerificationParams implements Parcelable {
hash += 7 * (mOriginatingURI==null?1:mOriginatingURI.hashCode());
hash += 11 * (mReferrer==null?1:mReferrer.hashCode());
hash += 13 * (mManifestDigest==null?1:mManifestDigest.hashCode());
+ hash += 17 * mInstallerUid;
return hash;
}
@@ -153,6 +171,8 @@ public class VerificationParams implements Parcelable {
sb.append(mReferrer.toString());
sb.append(",mManifestDigest=");
sb.append(mManifestDigest.toString());
+ sb.append(",mInstallerUid=");
+ sb.append(mInstallerUid);
sb.append('}');
return sb.toString();
@@ -164,6 +184,7 @@ public class VerificationParams implements Parcelable {
dest.writeParcelable(mOriginatingURI, 0);
dest.writeParcelable(mReferrer, 0);
dest.writeParcelable(mManifestDigest, 0);
+ dest.writeInt(mInstallerUid);
}
@@ -172,6 +193,7 @@ public class VerificationParams implements Parcelable {
mOriginatingURI = source.readParcelable(Uri.class.getClassLoader());
mReferrer = source.readParcelable(Uri.class.getClassLoader());
mManifestDigest = source.readParcelable(ManifestDigest.class.getClassLoader());
+ mInstallerUid = source.readInt();
}
public static final Parcelable.Creator<VerificationParams> CREATOR =
diff --git a/core/tests/coretests/src/android/content/pm/VerificationParamsTest.java b/core/tests/coretests/src/android/content/pm/VerificationParamsTest.java
index b814e2d..105bcba 100644
--- a/core/tests/coretests/src/android/content/pm/VerificationParamsTest.java
+++ b/core/tests/coretests/src/android/content/pm/VerificationParamsTest.java
@@ -34,6 +34,7 @@ public class VerificationParamsTest extends AndroidTestCase {
private final static String ORIGINATING_URI_STRING = "http://originating.uri/path";
private final static String REFERRER_STRING = "http://referrer.uri/path";
private final static byte[] DIGEST_BYTES = "fake digest".getBytes();
+ private final static int INSTALLER_UID = 42;
private final static Uri VERIFICATION_URI = Uri.parse(VERIFICATION_URI_STRING);
private final static Uri ORIGINATING_URI = Uri.parse(ORIGINATING_URI_STRING);
@@ -115,6 +116,18 @@ public class VerificationParamsTest extends AndroidTestCase {
assertFalse(params1.equals(params2));
}
+ public void testEquals_InstallerUid_Failure() throws Exception {
+ VerificationParams params1 = new VerificationParams(VERIFICATION_URI, ORIGINATING_URI,
+ REFERRER, MANIFEST_DIGEST);
+
+ VerificationParams params2 = new VerificationParams(
+ Uri.parse(VERIFICATION_URI_STRING), Uri.parse(ORIGINATING_URI_STRING),
+ Uri.parse(REFERRER_STRING), new ManifestDigest(DIGEST_BYTES));
+ params2.setInstallerUid(INSTALLER_UID);
+
+ assertFalse(params1.equals(params2));
+ }
+
public void testHashCode_Success() throws Exception {
VerificationParams params1 = new VerificationParams(VERIFICATION_URI, ORIGINATING_URI,
REFERRER, MANIFEST_DIGEST);
@@ -168,4 +181,16 @@ public class VerificationParamsTest extends AndroidTestCase {
assertFalse(params1.hashCode() == params2.hashCode());
}
+
+ public void testHashCode_InstallerUid_Failure() throws Exception {
+ VerificationParams params1 = new VerificationParams(VERIFICATION_URI, ORIGINATING_URI,
+ REFERRER, MANIFEST_DIGEST);
+
+ VerificationParams params2 = new VerificationParams(
+ Uri.parse(VERIFICATION_URI_STRING), Uri.parse(ORIGINATING_URI_STRING),
+ Uri.parse(REFERRER_STRING), new ManifestDigest("a different digest".getBytes()));
+ params2.setInstallerUid(INSTALLER_UID);
+
+ assertFalse(params1.hashCode() == params2.hashCode());
+ }
}