diff options
| author | 2020-02-06 17:48:56 +0000 | |
|---|---|---|
| committer | 2020-02-13 14:31:15 +0000 | |
| commit | 090fa3c6378eddb49c8c0b434cb9a3e82f1d56e4 (patch) | |
| tree | 2cc9b75758788279a16348b53a0536289d40f825 | |
| parent | 98a201dcd983f3101ec8f4deb0d01f5653cc340e (diff) | |
Add permission to ACTION_RESET_PROTECTION_POLICY_CHANGED
* Introduced new permission MANAGE_FACTORY_RESET_PROTECTION
which allows an application to set a factory reset
protection (FRP) policy.
* Added the new permission as the receiver permission when sending
a broadcast in setFactoryResetProtectionPolicy.
Bug: 148596703
Test: atest com.android.cts.devicepolicy.OrgOwnedProfileOwnerTest#testFactoryResetProtectionPolicy
atest com.android.cts.devicepolicy.MixedDeviceOwnerTest#testFactoryResetProtectionPolicy
Change-Id: I2a9c859c2304c12b58d7f16e6bae6dac15d3f8eb
5 files changed, 31 insertions, 7 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index c0f5e149e6a0..f3e8e057d1ac 100755 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -116,6 +116,7 @@ package android { field public static final String MANAGE_CONTENT_CAPTURE = "android.permission.MANAGE_CONTENT_CAPTURE"; field public static final String MANAGE_CONTENT_SUGGESTIONS = "android.permission.MANAGE_CONTENT_SUGGESTIONS"; field public static final String MANAGE_DEBUGGING = "android.permission.MANAGE_DEBUGGING"; + field public static final String MANAGE_FACTORY_RESET_PROTECTION = "android.permission.MANAGE_FACTORY_RESET_PROTECTION"; field public static final String MANAGE_IPSEC_TUNNELS = "android.permission.MANAGE_IPSEC_TUNNELS"; field public static final String MANAGE_ONE_TIME_PERMISSION_SESSIONS = "android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS"; field public static final String MANAGE_ROLE_HOLDERS = "android.permission.MANAGE_ROLE_HOLDERS"; @@ -872,7 +873,7 @@ package android.app.admin { field public static final String ACTION_PROVISION_FINALIZATION = "android.app.action.PROVISION_FINALIZATION"; field public static final String ACTION_PROVISION_FINANCED_DEVICE = "android.app.action.PROVISION_FINANCED_DEVICE"; field public static final String ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE = "android.app.action.PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE"; - field public static final String ACTION_RESET_PROTECTION_POLICY_CHANGED = "android.app.action.RESET_PROTECTION_POLICY_CHANGED"; + field @RequiresPermission(android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION) public static final String ACTION_RESET_PROTECTION_POLICY_CHANGED = "android.app.action.RESET_PROTECTION_POLICY_CHANGED"; field public static final String ACTION_SET_PROFILE_OWNER = "android.app.action.SET_PROFILE_OWNER"; field public static final String ACTION_STATE_USER_SETUP_COMPLETE = "android.app.action.STATE_USER_SETUP_COMPLETE"; field public static final String EXTRA_PROFILE_OWNER_NAME = "android.app.extra.PROFILE_OWNER_NAME"; diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 48eab92fe061..e4161a8a03e7 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -1416,6 +1416,7 @@ public class DevicePolicyManager { * @see #setFactoryResetProtectionPolicy * @hide */ + @RequiresPermission(android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION) @SystemApi public static final String ACTION_RESET_PROTECTION_POLICY_CHANGED = "android.app.action.RESET_PROTECTION_POLICY_CHANGED"; diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index d1031f4ef882..c663b4e5b4ab 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -645,6 +645,9 @@ <protected-broadcast android:name="android.intent.action.DEVICE_CUSTOMIZATION_READY" /> + <!-- Added in R --> + <protected-broadcast android:name="android.app.action.RESET_PROTECTION_POLICY_CHANGED" /> + <!-- For tether entitlement recheck--> <protected-broadcast android:name="com.android.server.connectivity.tethering.PROVISIONING_RECHECK_ALARM" /> @@ -1951,6 +1954,18 @@ android:description="@string/permdesc_modifyAudioSettings" android:protectionLevel="normal" /> + <!-- ======================================== --> + <!-- Permissions for factory reset protection --> + <!-- ======================================== --> + <eat-comment /> + + <!-- @SystemApi Allows an application to set a factory reset protection (FRP) policy. + <p>Not for use by third-party applications. + @hide + --> + <permission android:name="android.permission.MANAGE_FACTORY_RESET_PROTECTION" + android:protectionLevel="signature|privileged"/> + <!-- ================================== --> <!-- Permissions for accessing hardware --> <!-- ================================== --> diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index d2ec4360946b..d054400aed0f 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -7028,9 +7028,13 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { saveSettingsLocked(userId); } - mInjector.binderWithCleanCallingIdentity(() -> mContext.sendBroadcastAsUser( - new Intent(DevicePolicyManager.ACTION_RESET_PROTECTION_POLICY_CHANGED), - UserHandle.getUserHandleForUid(frpManagementAgentUid))); + final Intent intent = new Intent( + DevicePolicyManager.ACTION_RESET_PROTECTION_POLICY_CHANGED).addFlags( + Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND | Intent.FLAG_RECEIVER_FOREGROUND); + + mInjector.binderWithCleanCallingIdentity(() -> mContext.sendBroadcastAsUser(intent, + UserHandle.getUserHandleForUid(frpManagementAgentUid), + android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION)); DevicePolicyEventLogger .createEvent(DevicePolicyEnums.SET_FACTORY_RESET_PROTECTION) diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java index 3f74681cbe1d..8e4cb8c396a8 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java @@ -2098,7 +2098,8 @@ public class DevicePolicyManagerTest extends DpmTestBase { verify(mContext.spiedContext).sendBroadcastAsUser( MockUtils.checkIntentAction( DevicePolicyManager.ACTION_RESET_PROTECTION_POLICY_CHANGED), - MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE)); + MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE), + eq(android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION)); } public void testSetFactoryResetProtectionPolicyFailWithPO() throws Exception { @@ -2145,7 +2146,8 @@ public class DevicePolicyManagerTest extends DpmTestBase { verify(mContext.spiedContext).sendBroadcastAsUser( MockUtils.checkIntentAction( DevicePolicyManager.ACTION_RESET_PROTECTION_POLICY_CHANGED), - MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE)); + MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE), + eq(android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION)); } public void testGetFactoryResetProtectionPolicyWithFrpManagementAgent() @@ -2172,7 +2174,8 @@ public class DevicePolicyManagerTest extends DpmTestBase { verify(mContext.spiedContext).sendBroadcastAsUser( MockUtils.checkIntentAction( DevicePolicyManager.ACTION_RESET_PROTECTION_POLICY_CHANGED), - MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE)); + MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE), + eq(android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION)); } private void assertPoliciesAreEqual(FactoryResetProtectionPolicy expectedPolicy, |