From 27975949140cbd942bdc7bfe3a2b787b3b123508 Mon Sep 17 00:00:00 2001 From: Alex Johnston Date: Fri, 21 Feb 2020 16:21:38 +0000 Subject: [PATCH] Fix testScreenCaptureDisabled * A SecurityException was being thrown because getProfiles in UserManager cannot be called by the COPE PO for user 0 without permission MANAGE_USERS or CREATE_USERS. * Added binderWithCleanCallingIdentity to this method. Bug: 149941985 Test: atest com.android.cts.devicepolicy.OrgOwnedProfileOwnerTest#testScreenCaptureDisabled Change-Id: Iccc60233baaeaa732f197d7aaf31acc9d75a247b --- .../DevicePolicyManagerService.java | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 731cd1e3a503a..585bcb965de8e 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -4648,22 +4648,24 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { return getUserDataUnchecked(userHandle).mAdminList; } ArrayList admins = new ArrayList<>(); - for (UserInfo userInfo : mUserManager.getProfiles(userHandle)) { - DevicePolicyData policy = getUserDataUnchecked(userInfo.id); - if (userInfo.id == userHandle) { - admins.addAll(policy.mAdminList); - } else if (userInfo.isManagedProfile()) { - // For managed profiles, policies set on the parent profile will be included - for (int i = 0; i < policy.mAdminList.size(); i++) { - ActiveAdmin admin = policy.mAdminList.get(i); - if (admin.hasParentActiveAdmin()) { - admins.add(admin.getParentActiveAdmin()); + mInjector.binderWithCleanCallingIdentity(() -> { + for (UserInfo userInfo : mUserManager.getProfiles(userHandle)) { + DevicePolicyData policy = getUserDataUnchecked(userInfo.id); + if (userInfo.id == userHandle) { + admins.addAll(policy.mAdminList); + } else if (userInfo.isManagedProfile()) { + // For managed profiles, policies set on the parent profile will be included + for (int i = 0; i < policy.mAdminList.size(); i++) { + ActiveAdmin admin = policy.mAdminList.get(i); + if (admin.hasParentActiveAdmin()) { + admins.add(admin.getParentActiveAdmin()); + } } + } else { + Slog.w(LOG_TAG, "Unknown user type: " + userInfo); } - } else { - Slog.w(LOG_TAG, "Unknown user type: " + userInfo); } - } + }); return admins; }