if (!(didvar & DID_HOME))
*nep++ = format_env("HOME", user_dir);
if (!(didvar & DID_SHELL))
- *nep++ = format_env("SHELL", user_shell);
+ *nep++ = format_env("SHELL", sudo_user.pw->pw_shell);
if (!(didvar & DID_LOGNAME))
*nep++ = format_env("LOGNAME", user_name);
if (!(didvar & DID_USER))
/*
* Local functions not visible outside getspwuid.c
*/
-static char *sudo_getshell __P((struct passwd *));
static struct passwd *sudo_pwdup __P((struct passwd *));
-/*
- * Return the user's shell based on either the SHELL environment variable
- * (already assigned to user_shell) or, failing that, the passwd(5) entry.
- */
-static char *
-sudo_getshell(pw)
- struct passwd *pw;
-{
- char *pw_shell;
-
- if ((pw_shell = user_shell) == NULL)
- pw_shell = pw->pw_shell;
-
- /* empty string "" means bourne shell */
- if (*pw_shell == '\0')
- pw_shell = _PATH_BSHELL;
-
- return(pw_shell);
-}
-
/*
* Return a copy of the encrypted password for the user described by pw.
* If shadow passwords are in use, look in the shadow file.
local_pw->pw_class = estrdup(pw->pw_class);
#endif
- /* pw_shell is a special case since we overide with $SHELL */
- local_pw->pw_shell = estrdup(sudo_getshell(pw));
+ /* If shell field is empty, expand to _PATH_BSHELL. */
+ if (local_pw->pw_shell[0] == '\0')
+ local_pw->pw_shell = _PATH_BSHELL;
+ else
+ local_pw->pw_shell = estrdup(pw->pw_shell);
/* pw_passwd gets a shadow password if applicable */
local_pw->pw_passwd = sudo_getepw(pw);
log_error(0, "uid %ld does not exist in the passwd file!",
(long) pw.pw_uid);
}
- user_shell = sudo_user.pw->pw_shell;
+ if (user_shell == NULL || *user_shell == '\0')
+ user_shell = sudo_user.pw->pw_shell;
/* It is now safe to use log_error() and set_perms() */