From c6f23b3ba1665177f4b7c5e15268965ebf383698 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Thu, 2 Feb 2012 14:13:45 +0100 Subject: [PATCH] login: (and chsh) make pw_shell usage more robust Signed-off-by: Karel Zak --- login-utils/chsh.c | 2 +- login-utils/login.c | 2 +- login-utils/newgrp.c | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/login-utils/chsh.c b/login-utils/chsh.c index 3aa4f350b8..5481f7c387 100644 --- a/login-utils/chsh.c +++ b/login-utils/chsh.c @@ -185,7 +185,7 @@ int main(int argc, char **argv) if (check_shell(shell) < 0) return EXIT_FAILURE; - if (!strcmp(pw->pw_shell, shell)) + if (strcmp(oldshell, shell) == 0) errx(EXIT_SUCCESS, _("Shell not changed.")); pw->pw_shell = shell; if (setpwnam(pw) < 0) { diff --git a/login-utils/login.c b/login-utils/login.c index 5ff8802d1e..fb87e6076c 100644 --- a/login-utils/login.c +++ b/login-utils/login.c @@ -1363,7 +1363,7 @@ int main(int argc, char **argv) exit(EXIT_FAILURE); } - if (*pwd->pw_shell == '\0') + if (pwd->pw_shell == NULL || *pwd->pw_shell == '\0') pwd->pw_shell = _PATH_BSHELL; init_environ(&cxt); /* init $HOME, $TERM ... */ diff --git a/login-utils/newgrp.c b/login-utils/newgrp.c index 85cba7752a..9839934169 100644 --- a/login-utils/newgrp.c +++ b/login-utils/newgrp.c @@ -138,7 +138,8 @@ int main(int argc, char *argv[]) if (!(pw_entry = getpwuid(getuid()))) err(EXIT_FAILURE, _("who are you?")); - shell = (pw_entry->pw_shell[0] ? pw_entry->pw_shell : _PATH_BSHELL); + shell = (pw_entry->pw_shell && *pw_entry->pw_shell ? + pw_entry->pw_shell : _PATH_BSHELL); if (argc < 2) { if (setgid(pw_entry->pw_gid) < 0) -- 2.47.3