=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/sudo/Attic/getspwuid.c,v retrieving revision 1.4.2.1 retrieving revision 1.5 diff -u -r1.4.2.1 -r1.5 --- src/usr.bin/sudo/Attic/getspwuid.c 2002/01/18 17:20:23 1.4.2.1 +++ src/usr.bin/sudo/Attic/getspwuid.c 2002/01/03 03:49:16 1.5 @@ -84,7 +84,7 @@ #include "sudo.h" #ifndef lint -static const char rcsid[] = "$Sudo: getspwuid.c,v 1.62 2002/01/15 23:43:59 millert Exp $"; +static const char rcsid[] = "$Sudo: getspwuid.c,v 1.61 2001/12/14 19:52:47 millert Exp $"; #endif /* lint */ /* @@ -98,10 +98,31 @@ /* * 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. */ @@ -215,11 +236,8 @@ local_pw->pw_class = estrdup(pw->pw_class); #endif - /* 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_shell is a special case since we overide with $SHELL */ + local_pw->pw_shell = estrdup(sudo_getshell(pw)); /* pw_passwd gets a shadow password if applicable */ local_pw->pw_passwd = sudo_getepw(pw);