aboutsummaryrefslogtreecommitdiff
path: root/toys/pending/useradd.c
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2014-09-26 18:49:44 -0500
committerRob Landley <rob@landley.net>2014-09-26 18:49:44 -0500
commite0d8009d76b3a2451cb6c6ed2b241c7eff06ed60 (patch)
treef2904430b0cb86f7b7a2721ae2ddd60fcf727166 /toys/pending/useradd.c
parente1fa787be8d0d66c9860c86dcb80fd6e096f74e0 (diff)
downloadtoybox-e0d8009d76b3a2451cb6c6ed2b241c7eff06ed60.tar.gz
The only illegal characters in a username are ":" (field separator), "\n" (line separator), and "/" (filename separator).
Restricting usernames to the legacy posix character allowed set (for filenames, so the $HOME directory is creatable on VFAT and similar) means you can't have UTF-8 usernames. Linux allows any character but / and NUL in filenames. Since root is creating these entries, we assume root knows what it's doing.
Diffstat (limited to 'toys/pending/useradd.c')
-rw-r--r--toys/pending/useradd.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/toys/pending/useradd.c b/toys/pending/useradd.c
index 9f1fa4c5..4f2bcc61 100644
--- a/toys/pending/useradd.c
+++ b/toys/pending/useradd.c
@@ -54,8 +54,8 @@ void useradd_main(void)
}
// Sanity check user to add
- if (strchr(s, ':') || strchr(s, '/') || strlen(s) > LOGIN_NAME_MAX)
- error_exit("bad name");
+ if (s[strcspn(s, ":/\n")] || strlen(s) > LOGIN_NAME_MAX)
+ error_exit("bad username");
// race condition: two adds at same time?
if (getpwnam(s)) error_exit("'%s' in use", s);