summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Felipe Leme <felipeal@google.com> 2022-10-25 02:32:39 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-10-25 02:32:39 +0000
commit5bb44fe5ce463ed21959457075e8df46a9cb299e (patch)
tree6c2ce06cb86a9b820d9a81187a4ec1c6396204f9
parentd2b25e89a78b981ad1b22b1e59180d4a9ab0bee4 (diff)
parent48e645db7b35c3f28cf8e55a5725e11198ab7dea (diff)
Merge "New Shell command to rename a user."
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerShellCommand.java32
-rw-r--r--services/core/java/com/android/server/pm/UserManagerService.java36
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) {