From 5db602fd196cde39feed21e173b553aae136d040 Mon Sep 17 00:00:00 2001 From: Svetoslav Date: Mon, 2 Nov 2015 18:40:18 -0800 Subject: [PATCH] Enforce weaker grant if app is default handler for miltiple action Change-Id: Ibc46e458e277412ebb276eb5ba6f2765b6b6c5e9 --- .../android/server/pm/DefaultPermissionGrantPolicy.java | 17 +++++++++++++++-- .../com/android/server/pm/PackageManagerService.java | 6 ------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java index b5046056e913..96bc86c26116 100644 --- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java @@ -819,8 +819,8 @@ final class DefaultPermissionGrantPolicy { mService.grantRuntimePermission(pkg.packageName, permission, userId); if (DEBUG) { - Log.i(TAG, "Granted " + permission + " to default handler " - + pkg.packageName); + Log.i(TAG, "Granted " + (systemFixed ? "fixed " : "not fixed ") + + permission + " to default handler " + pkg.packageName); } int newFlags = PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT; @@ -831,6 +831,19 @@ final class DefaultPermissionGrantPolicy { mService.updatePermissionFlags(permission, pkg.packageName, newFlags, newFlags, userId); } + + // If a component gets a permission for being the default handler A + // and also default handler B, we grant the weaker grant form. + if ((flags & PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT) != 0 + && (flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0 + && !systemFixed) { + if (DEBUG) { + Log.i(TAG, "Granted not fixed " + permission + " to default handler " + + pkg.packageName); + } + mService.updatePermissionFlags(permission, pkg.packageName, + PackageManager.FLAG_PERMISSION_SYSTEM_FIXED, 0, userId); + } } } } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 8f9b2c896a95..58e1b33ff35d 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -3716,12 +3716,6 @@ public class PackageManagerService extends IPackageManager.Stub { PermissionsState permissionsState = sb.getPermissionsState(); - // Only the package manager can change flags for system component permissions. - final int flags = permissionsState.getPermissionFlags(bp.name, userId); - if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) { - return; - } - boolean hadState = permissionsState.getRuntimePermissionState(name, userId) != null; if (permissionsState.updatePermissionFlags(bp, userId, flagMask, flagValues)) { -- 2.11.0