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);

Reply via email to