aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/env/env.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/env/env.c')
-rw-r--r--usr.bin/env/env.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/usr.bin/env/env.c b/usr.bin/env/env.c
index e408577ea7a4..0aa42a4663dd 100644
--- a/usr.bin/env/env.c
+++ b/usr.bin/env/env.c
@@ -144,16 +144,23 @@ main(int argc, char **argv)
login_class = strchr(login_name, '/');
if (login_class)
*login_class++ = '\0';
- pw = getpwnam(login_name);
- if (pw == NULL) {
- char *endp = NULL;
- errno = 0;
- uid = strtoul(login_name, &endp, 10);
- if (errno == 0 && *endp == '\0')
- pw = getpwuid(uid);
+ if (*login_name != '\0' && strcmp(login_name,"-") != 0) {
+ pw = getpwnam(login_name);
+ if (pw == NULL) {
+ char *endp = NULL;
+ errno = 0;
+ uid = strtoul(login_name, &endp, 10);
+ if (errno == 0 && *endp == '\0')
+ pw = getpwuid(uid);
+ }
+ if (pw == NULL)
+ errx(EXIT_FAILURE, "no such user: %s", login_name);
}
- if (pw == NULL)
- errx(EXIT_FAILURE, "no such user: %s", login_name);
+ /*
+ * Note that it is safe for pw to be null here; the libutil
+ * code handles that, bypassing substitution of $ and using
+ * the class "default" if no class name is given either.
+ */
if (login_class != NULL) {
lc = login_getclass(login_class);
if (lc == NULL)