Bug in chsh / passwd -s
Mark Bartelt
mark at sickkids.UUCP
Sat Dec 10 04:04:32 AEST 1988
A bug in passwd.c has the effect of making it possible to change one's
login shell from /bin/sh to /bin/csh, but not vice-versa. (Unless one
swaps the order of /bin/sh and /bin/csh in /etc/shells, in which case
one has the reverse problem!)
In getloginshell(), there are two loops which call getusershell():
for (valid = getusershell(); valid; valid = getusershell()) {
The first loop is used to confirm that the user who is invoking chsh (or
its equivalent, passwd -s) has an (old) login shell listed in /etc/shells;
the second is used to verify that the new shell chosen is valid. The bug
and fix are obvious; change the second loop to begin:
for (setusershell(), valid=getusershell(); valid; valid=getusershell()) {
Well, maybe not; setusershell() doesn't work as distributed with 4.3bsd.
One can either fix *that* bug first, or use endusershell() in place of
setusershell() above.
Mark Bartelt UUCP: {utzoo,decvax}!sickkids!mark
Hospital for Sick Children, Toronto BITNET: mark at sickkids.utoronto
416/598-6442 INTERNET: mark at sickkids.toronto.edu
More information about the Comp.bugs.4bsd.ucb-fixes
mailing list