Merge "Relax permissions for isUserOfType, isUserNameSet" into tm-dev

This commit is contained in:
Adam Bookatz
2022-03-22 02:33:54 +00:00
committed by Android (Google) Code Review
3 changed files with 26 additions and 11 deletions

View File

@@ -9804,8 +9804,8 @@ package android.os {
method public boolean isRestrictedProfile(); 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}, 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.QUERY_USERS}) public boolean isSameProfileGroup(@NonNull android.os.UserHandle, @NonNull android.os.UserHandle);
method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_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, android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED}) public boolean isUserNameSet();
method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isUserOfType(@NonNull String); method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS, android.Manifest.permission.QUERY_USERS}) public boolean isUserOfType(@NonNull String);
method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isUserUnlockingOrUnlocked(@NonNull android.os.UserHandle); method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isUserUnlockingOrUnlocked(@NonNull android.os.UserHandle);
method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean removeUser(@NonNull android.os.UserHandle); method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean removeUser(@NonNull android.os.UserHandle);
method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public int removeUserWhenPossible(@NonNull android.os.UserHandle, boolean); method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public int removeUserWhenPossible(@NonNull android.os.UserHandle, boolean);

View File

@@ -2186,9 +2186,17 @@ public class UserManager {
* @hide * @hide
*/ */
@SystemApi @SystemApi
@RequiresPermission(anyOf = {Manifest.permission.MANAGE_USERS, @RequiresPermission(anyOf = {
Manifest.permission.GET_ACCOUNTS_PRIVILEGED}) android.Manifest.permission.MANAGE_USERS,
@UserHandleAware(enabledSinceTargetSdkVersion = Build.VERSION_CODES.TIRAMISU) android.Manifest.permission.CREATE_USERS,
android.Manifest.permission.QUERY_USERS,
android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED})
@UserHandleAware(
enabledSinceTargetSdkVersion = Build.VERSION_CODES.TIRAMISU,
requiresAnyOfPermissionsIfNotCaller = {
android.Manifest.permission.MANAGE_USERS,
android.Manifest.permission.CREATE_USERS,
android.Manifest.permission.QUERY_USERS})
public boolean isUserNameSet() { public boolean isUserNameSet() {
try { try {
return mService.isUserNameSet(getContextUserIfAppropriate()); return mService.isUserNameSet(getContextUserIfAppropriate());
@@ -2292,8 +2300,11 @@ public class UserManager {
* @hide * @hide
*/ */
@SystemApi @SystemApi
@RequiresPermission(anyOf = {
android.Manifest.permission.MANAGE_USERS,
android.Manifest.permission.CREATE_USERS,
android.Manifest.permission.QUERY_USERS})
@UserHandleAware @UserHandleAware
@RequiresPermission(android.Manifest.permission.MANAGE_USERS)
public boolean isUserOfType(@NonNull String userType) { public boolean isUserOfType(@NonNull String userType) {
try { try {
return mService.isUserOfType(mUserId, userType); return mService.isUserOfType(mUserId, userType);

View File

@@ -1387,7 +1387,7 @@ public class UserManagerService extends IUserManager.Stub {
*/ */
@Override @Override
public boolean isUserOfType(@UserIdInt int userId, String userType) { public boolean isUserOfType(@UserIdInt int userId, String userType) {
checkManageUsersPermission("check user type"); checkQueryOrCreateUsersPermission("check user type");
return userType != null && userType.equals(getUserTypeNoChecks(userId)); return userType != null && userType.equals(getUserTypeNoChecks(userId));
} }
@@ -1643,7 +1643,7 @@ public class UserManagerService extends IUserManager.Stub {
if (!hasQueryOrCreateUsersPermission() if (!hasQueryOrCreateUsersPermission()
&& !hasPermissionGranted( && !hasPermissionGranted(
android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED, callingUid)) { android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED, callingUid)) {
throw new SecurityException("You need MANAGE_USERS or CREATE_USERS or " throw new SecurityException("You need MANAGE_USERS, CREATE_USERS, QUERY_USERS, or "
+ "GET_ACCOUNTS_PRIVILEGED permissions to: get user name"); + "GET_ACCOUNTS_PRIVILEGED permissions to: get user name");
} }
final int userId = UserHandle.getUserId(callingUid); final int userId = UserHandle.getUserId(callingUid);
@@ -5064,9 +5064,13 @@ public class UserManagerService extends IUserManager.Stub {
@Override @Override
public boolean isUserNameSet(@UserIdInt int userId) { public boolean isUserNameSet(@UserIdInt int userId) {
if (!hasManageUsersOrPermission(android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED)) { final int callingUid = Binder.getCallingUid();
throw new SecurityException("You need MANAGE_USERS or GET_ACCOUNTS_PRIVILEGED " final int callingUserId = UserHandle.getUserId(callingUid);
+ "permissions to: get whether user name is set"); if (!hasQueryOrCreateUsersPermission()
&& !(callingUserId == userId && hasPermissionGranted(
android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED, callingUid))) {
throw new SecurityException("You need MANAGE_USERS, CREATE_USERS, QUERY_USERS, or "
+ "GET_ACCOUNTS_PRIVILEGED permissions to: get whether user name is set");
} }
synchronized (mUsersLock) { synchronized (mUsersLock) {
final UserInfo userInfo = getUserInfoLU(userId); final UserInfo userInfo = getUserInfoLU(userId);