diff options
author | Amith Yamasani <yamasani@google.com> | 2012-08-21 15:40:12 -0700 |
---|---|---|
committer | Amith Yamasani <yamasani@google.com> | 2012-08-22 10:28:56 -0700 |
commit | 1952637425eece18aa1ce3d80d4b49086ef3bcf7 (patch) | |
tree | 095569083ec9fb2f52bb05919f0f6008e130b44a /services/java/com/android/server/pm/UserManagerService.java | |
parent | 7e877fa00c6b093a0fe734e5d3bf23b5b2d6411e (diff) |
Remove permission requirement for some UserManager calls
Update javadocs to be explicit about permissions.
Minor fixes in UserManagerService
Change-Id: I0d355e0a60e5dbdb49ed06091111d480ff249f3d
Diffstat (limited to 'services/java/com/android/server/pm/UserManagerService.java')
-rw-r--r-- | services/java/com/android/server/pm/UserManagerService.java | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/services/java/com/android/server/pm/UserManagerService.java b/services/java/com/android/server/pm/UserManagerService.java index c292bbcfaded..f5b4053bd0b2 100644 --- a/services/java/com/android/server/pm/UserManagerService.java +++ b/services/java/com/android/server/pm/UserManagerService.java @@ -137,11 +137,17 @@ public class UserManagerService extends IUserManager.Stub { public UserInfo getUserInfo(int userId) { checkManageUsersPermission("query user"); synchronized (mUsers) { - UserInfo info = mUsers.get(userId); - return info; + return getUserInfoLocked(userId); } } + /* + * Should be locked on mUsers before calling this. + */ + private UserInfo getUserInfoLocked(int userId) { + return mUsers.get(userId); + } + public boolean exists(int userId) { synchronized (mUsers) { return ArrayUtils.contains(mUserIds, userId); @@ -212,8 +218,9 @@ public class UserManagerService extends IUserManager.Stub { } /** - * Enforces that only the system UID or root's UID can call a method exposed - * via Binder. + * Enforces that only the system UID or root's UID or apps that have the + * {@link android.Manifest.permission.MANAGE_USERS MANAGE_USERS} + * permission can make certain calls to the UserManager. * * @param message used as message if SecurityException is thrown * @throws SecurityException if the caller is not system or root @@ -534,7 +541,7 @@ public class UserManagerService extends IUserManager.Stub { public int getUserSerialNumber(int userHandle) { synchronized (mUsers) { if (!exists(userHandle)) return -1; - return getUserInfo(userHandle).serialNumber; + return getUserInfoLocked(userHandle).serialNumber; } } @@ -542,7 +549,7 @@ public class UserManagerService extends IUserManager.Stub { public int getUserHandle(int userSerialNumber) { synchronized (mUsers) { for (int userId : mUserIds) { - if (getUserInfo(userId).serialNumber == userSerialNumber) return userId; + if (getUserInfoLocked(userId).serialNumber == userSerialNumber) return userId; } // Not found return -1; @@ -617,14 +624,16 @@ public class UserManagerService extends IUserManager.Stub { * @return */ private int getNextAvailableId() { - int i = 0; - while (i < Integer.MAX_VALUE) { - if (mUsers.indexOfKey(i) < 0) { - break; + synchronized (mUsers) { + int i = 0; + while (i < Integer.MAX_VALUE) { + if (mUsers.indexOfKey(i) < 0) { + break; + } + i++; } - i++; + return i; } - return i; } private boolean createPackageFolders(int id, File userPath) { |