summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kholoud Mohamed <kholoudm@google.com> 2024-04-23 16:44:06 +0000
committer Kholoud Mohamed <kholoudm@google.com> 2024-04-24 11:04:03 +0000
commit4458ad7f23524d890cc6a2bc26500c5f19169d26 (patch)
treecaf0f3b1ac58d9dd3b4c3fba6cbb34f237db51ce
parent81f6b5c690b5d5e1bf8c87523ab28ee5ad1d09ed (diff)
Fix bug in createAndManageUser on non hsum devices
The recent changes for blocking createAndManageUser accidentally blocked it even on non-hsum devices if the DPC had specified the single_user mode in its manifest. Bug: 336547982 Test: atest com.android.cts.devicepolicy.DeviceOwnerTest Change-Id: I937c68eb1a6eef6cc26e18d7f17f651e4dac072e
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java13
1 files changed, 8 insertions, 5 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index be235b3bef92..4f4d3904afc6 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -12413,7 +12413,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
if (Flags.headlessDeviceOwnerSingleUserEnabled()) {
// Block this method if the device is in headless main user mode
Preconditions.checkCallAuthorization(
- getHeadlessDeviceOwnerModeForDeviceOwner()
+ !mInjector.userManagerIsHeadlessSystemUserMode()
+ || getHeadlessDeviceOwnerModeForDeviceOwner()
!= HEADLESS_DEVICE_OWNER_MODE_SINGLE_USER,
"createAndManageUser was called while in headless single user mode");
}
@@ -23472,10 +23473,12 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
}
private boolean hasAdminPolicy(int adminPolicy, String callerPackageName) {
- CallerIdentity caller = getCallerIdentity(callerPackageName);
- ActiveAdmin deviceAdmin = getActiveAdminWithPolicyForUidLocked(
- null, adminPolicy, caller.getUid());
- return deviceAdmin != null;
+ synchronized (getLockObject()) {
+ CallerIdentity caller = getCallerIdentity(callerPackageName);
+ ActiveAdmin deviceAdmin = getActiveAdminWithPolicyForUidLocked(
+ null, adminPolicy, caller.getUid());
+ return deviceAdmin != null;
+ }
}
/**