From 7e5358842a9a3fed4c1bf00ab82154a3f830fce9 Mon Sep 17 00:00:00 2001 From: Adam Bookatz Date: Wed, 8 Mar 2023 11:06:17 -0800 Subject: [PATCH] isRestrictedProfile() allowed for QUERY_USERS `isRestrictedProfile()` currently requires CREATE_USERS or MANAGE_USERS, but doesn't accept QUERY_USERS. This is inconsistent because it's really a query-type API, and also because the same information can be inferred from `getRestrictedProfileParent()` which already accepts QUERY_USERS. So we make it consistent. Bug: 272303195 Change-Id: I3071c059665486dc7cde2a2da59bca40fc16d830 Test: builds --- core/api/system-current.txt | 2 +- core/java/android/os/UserManager.java | 9 ++++++--- .../java/com/android/server/pm/UserManagerService.java | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 3df40bac84a86..9949268706cf3 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -10962,7 +10962,7 @@ package android.os { method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS, android.Manifest.permission.QUERY_USERS}) public boolean isPrimaryUser(); method public static boolean isRemoveResultSuccessful(int); method public boolean isRestrictedProfile(); - method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}, conditional=true) public boolean isRestrictedProfile(@NonNull android.os.UserHandle); + method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS, android.Manifest.permission.QUERY_USERS}, conditional=true) public boolean isRestrictedProfile(@NonNull android.os.UserHandle); method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.QUERY_USERS}) public boolean isSameProfileGroup(@NonNull android.os.UserHandle, @NonNull android.os.UserHandle); method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS, android.Manifest.permission.QUERY_USERS, android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED}) public boolean isUserNameSet(); method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS, android.Manifest.permission.QUERY_USERS}) public boolean isUserOfType(@NonNull String); diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 08aea8e8e9dcc..de9dbc3ff9749 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -2582,7 +2582,8 @@ public class UserManager { enabledSinceTargetSdkVersion = Build.VERSION_CODES.TIRAMISU, requiresAnyOfPermissionsIfNotCaller = { android.Manifest.permission.MANAGE_USERS, - android.Manifest.permission.CREATE_USERS} + android.Manifest.permission.CREATE_USERS, + android.Manifest.permission.QUERY_USERS} ) public boolean isLinkedUser() { return isRestrictedProfile(); @@ -2600,7 +2601,8 @@ public class UserManager { enabledSinceTargetSdkVersion = Build.VERSION_CODES.TIRAMISU, requiresAnyOfPermissionsIfNotCaller = { android.Manifest.permission.MANAGE_USERS, - android.Manifest.permission.CREATE_USERS} + android.Manifest.permission.CREATE_USERS, + android.Manifest.permission.QUERY_USERS} ) public boolean isRestrictedProfile() { try { @@ -2621,7 +2623,8 @@ public class UserManager { @SystemApi @RequiresPermission(anyOf = { Manifest.permission.MANAGE_USERS, - Manifest.permission.CREATE_USERS}, + Manifest.permission.CREATE_USERS, + Manifest.permission.QUERY_USERS}, conditional = true) public boolean isRestrictedProfile(@NonNull UserHandle user) { try { diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 3ea10bc9b6828..9a97b85d88ef8 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -2251,7 +2251,7 @@ public class UserManagerService extends IUserManager.Stub { @Override public boolean isRestricted(@UserIdInt int userId) { if (userId != UserHandle.getCallingUserId()) { - checkCreateUsersPermission("query isRestricted for user " + userId); + checkQueryOrCreateUsersPermission("query isRestricted for user " + userId); } synchronized (mUsersLock) { final UserInfo userInfo = getUserInfoLU(userId);