commit e9bcdcc341d74f0abaa171703ac031b55e9020c0 Author: neeshy <nee...@tfwno.gf> AuthorDate: Mon Feb 12 21:41:02 2024 -0500 Commit: Roberto E. Vargas Caballero <k...@shike2.com> CommitDate: Wed Mar 6 10:11:29 2024 +0100
su: check $SHELL for validity If $SHELL isn't defined in the environment, the call to execve will fail when -p is specified. Fallback to the user's login shell if $SHELL is invalid. diff --git a/su.c b/su.c index 64ca9b6..0f16637 100644 --- a/su.c +++ b/su.c @@ -28,7 +28,7 @@ int main(int argc, char *argv[]) { char *usr = "root", *pass; - char *shell, *term; + char *shell, *envshell, *term; struct passwd *pw; char *newargv[3]; uid_t uid; @@ -89,7 +89,9 @@ main(int argc, char *argv[]) newargv[2] = NULL; } else { if (pflag) { - shell = getenv("SHELL"); + envshell = getenv("SHELL"); + if (envshell && envshell[0] != '\0') + shell = envshell; } else { setenv("HOME", pw->pw_dir, 1); setenv("SHELL", shell, 1);