commit e9bcdcc341d74f0abaa171703ac031b55e9020c0
parent cf9e26d7fa2d13ede8ce2830819e311fc0dd83b9
Author: neeshy <neeshy@tfwno.gf>
Date: Mon, 12 Feb 2024 21:41:02 -0500
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.
Diffstat:
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git 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);