From e9bcdcc341d74f0abaa171703ac031b55e9020c0 Mon Sep 17 00:00:00 2001 From: neeshy Date: Mon, 12 Feb 2024 21:41:02 -0500 Subject: [PATCH] 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. --- su.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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);