diff options
| author | 2022-10-25 02:32:39 +0000 | |
|---|---|---|
| committer | 2022-10-25 02:32:39 +0000 | |
| commit | 5bb44fe5ce463ed21959457075e8df46a9cb299e (patch) | |
| tree | 6c2ce06cb86a9b820d9a81187a4ec1c6396204f9 | |
| parent | d2b25e89a78b981ad1b22b1e59180d4a9ab0bee4 (diff) | |
| parent | 48e645db7b35c3f28cf8e55a5725e11198ab7dea (diff) | |
Merge "New Shell command to rename a user."
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerShellCommand.java | 32 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/UserManagerService.java | 36 |
2 files changed, 55 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 76858d970069..3c1cba35cd45 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -316,6 +316,8 @@ class PackageManagerShellCommand extends ShellCommand { return runCreateUser(); case "remove-user": return runRemoveUser(); + case "rename-user": + return runRenameUser(); case "set-user-restriction": return runSetUserRestriction(); case "supports-multiple-users": @@ -3024,6 +3026,28 @@ class PackageManagerShellCommand extends ShellCommand { } } + private int runRenameUser() throws RemoteException { + String arg = getNextArg(); + if (arg == null) { + getErrPrintWriter().println("Error: no user id specified."); + return 1; + } + int userId = resolveUserId(UserHandle.parseUserArg(arg)); + + String name = getNextArg(); + if (name == null) { + Slog.i(TAG, "Resetting name of user " + userId); + } else { + Slog.i(TAG, "Renaming user " + userId + " to '" + name + "'"); + } + + IUserManager um = IUserManager.Stub.asInterface( + ServiceManager.getService(Context.USER_SERVICE)); + um.setUserName(userId, name); + + return 0; + } + public int runSetUserRestriction() throws RemoteException { int userId = UserHandle.USER_SYSTEM; String opt = getNextOption(); @@ -3937,6 +3961,11 @@ class PackageManagerShellCommand extends ShellCommand { return res; } + // Resolves the userId; supports UserHandle.USER_CURRENT, but not other special values + private @UserIdInt int resolveUserId(@UserIdInt int userId) { + return userId == UserHandle.USER_CURRENT ? ActivityManager.getCurrentUser() : userId; + } + @Override public void onHelp() { final PrintWriter pw = getOutPrintWriter(); @@ -4208,6 +4237,9 @@ class PackageManagerShellCommand extends ShellCommand { pw.println(" switch or reboot)"); pw.println(" --wait: Wait until user is removed. Ignored if set-ephemeral-if-in-use"); pw.println(""); + pw.println(" rename-user USER_ID [USER_NAME]"); + pw.println(" Rename USER_ID with USER_NAME (or null when [USER_NAME] is not set)"); + pw.println(""); pw.println(" set-user-restriction [--user USER_ID] RESTRICTION VALUE"); pw.println(""); pw.println(" get-max-users"); diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index f578fb5b7f41..9ae926990cca 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -2278,26 +2278,31 @@ public class UserManagerService extends IUserManager.Stub { @Override public void setUserName(@UserIdInt int userId, String name) { checkManageUsersPermission("rename users"); - boolean changed = false; synchronized (mPackagesLock) { UserData userData = getUserDataNoChecks(userId); if (userData == null || userData.info.partial) { - Slog.w(LOG_TAG, "setUserName: unknown user #" + userId); + Slogf.w(LOG_TAG, "setUserName: unknown user #%d", userId); return; } - if (name != null && !name.equals(userData.info.name)) { - userData.info.name = name; - writeUserLP(userData); - changed = true; + if (Objects.equals(name, userData.info.name)) { + Slogf.i(LOG_TAG, "setUserName: ignoring for user #%d as it didn't change (%s)", + userId, getRedacted(name)); + return; } - } - if (changed) { - final long ident = Binder.clearCallingIdentity(); - try { - sendUserInfoChangedBroadcast(userId); - } finally { - Binder.restoreCallingIdentity(ident); + if (name == null) { + Slogf.i(LOG_TAG, "setUserName: resetting name of user #%d", userId); + } else { + Slogf.i(LOG_TAG, "setUserName: setting name of user #%d to %s", userId, + getRedacted(name)); } + userData.info.name = name; + writeUserLP(userData); + } + final long ident = Binder.clearCallingIdentity(); + try { + sendUserInfoChangedBroadcast(userId); + } finally { + Binder.restoreCallingIdentity(ident); } } @@ -6108,6 +6113,11 @@ public class UserManagerService extends IUserManager.Stub { return RESTRICTIONS_FILE_PREFIX + packageName + XML_SUFFIX; } + @Nullable + private static String getRedacted(@Nullable String string) { + return string == null ? null : string.length() + "_chars"; + } + @Override public void setSeedAccountData(@UserIdInt int userId, String accountName, String accountType, PersistableBundle accountOptions, boolean persist) { |