From 93f5ed6c18d3c3a8fb0066d00dba3b6cb475a16d Mon Sep 17 00:00:00 2001 From: Andrew Sapperstein Date: Thu, 20 Jun 2019 15:25:19 -0700 Subject: [PATCH] Allow granting URI permissions to com.android.settings.module_licenses. Exempts this new ContentProvider for providing mainline module licenses. Also sets ApplicationInfo.publicSourceDir for APEXes. Bug: 135183006 Test: open module licenses, click app, verify file opens Change-Id: Iec4f1de198525f7cd176a52d8448a2c71b6aabc0 --- core/java/android/content/pm/PackageParser.java | 1 + .../java/com/android/server/uri/UriGrantsManagerService.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 89be0000ca0ea..b3776787cc2bd 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -8396,6 +8396,7 @@ public class PackageParser { PackageInfo pi = generatePackageInfo(p, EmptyArray.INT, flags, 0, 0, Collections.emptySet(), state); pi.applicationInfo.sourceDir = apexFile.getPath(); + pi.applicationInfo.publicSourceDir = apexFile.getPath(); if (apexInfo.isFactory) { pi.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM; } else { diff --git a/services/core/java/com/android/server/uri/UriGrantsManagerService.java b/services/core/java/com/android/server/uri/UriGrantsManagerService.java index 8b332d271a3a0..55f062bca2d18 100644 --- a/services/core/java/com/android/server/uri/UriGrantsManagerService.java +++ b/services/core/java/com/android/server/uri/UriGrantsManagerService.java @@ -1032,11 +1032,13 @@ public class UriGrantsManagerService extends IUriGrantsManager.Stub { // must always grant permissions on behalf of someone explicit. final int callingAppId = UserHandle.getAppId(callingUid); if ((callingAppId == SYSTEM_UID) || (callingAppId == ROOT_UID)) { - if ("com.android.settings.files".equals(grantUri.uri.getAuthority())) { + if ("com.android.settings.files".equals(grantUri.uri.getAuthority()) + || "com.android.settings.module_licenses".equals(grantUri.uri.getAuthority())) { // Exempted authority for // 1. cropping user photos and sharing a generated license html // file in Settings app // 2. sharing a generated license html file in TvSettings app + // 3. Sharing module license files from Settings app } else { Slog.w(TAG, "For security reasons, the system cannot issue a Uri permission" + " grant to " + grantUri + "; use startActivityAsCaller() instead");