andy@cheviot.newcastle.ac.uk (Andy Linton) (01/16/87)
Imagine my surprise when I was told by chsh (or passwd -s)
that
/bin/sh is unacceptable as a new shell.
/bin/csh and /bin/msh were equally unacceptable.
The problem occurs because passwd -s uses getusershell()
to read /etc/shells in two places and doesn't rewind to
the beginning of /etc/shells before reading again. This
I feel sure has been seen before but a fix follows.
Feed me to patch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*** passwd.c Fri Jan 16 15:42:16 1987
--- passwd.c.orig Fri Jan 16 11:10:13 1987
***************
*** 340,346 ****
{
static char newshell[BUFSIZ];
char *cp, *valid, *getusershell();
- int endusershell();
if (pwd->pw_shell == 0 || *pwd->pw_shell == '\0')
pwd->pw_shell = DEFSHELL;
--- 340,345 ----
***************
*** 348,354 ****
for (valid = getusershell(); valid; valid = getusershell())
if (strcmp(pwd->pw_shell, valid) == 0)
break;
- (void) endusershell(); /* close /etc/shells */
if (valid == NULL) {
printf("Cannot change from restricted shell %s\n",
pwd->pw_shell);
--- 347,352 ----
***************
*** 389,396 ****
break;
}
}
! (void) endusershell(); /* close /etc/shells */
! if (valid == NULL) {
printf("%s is unacceptable as a new shell.\n",
newshell);
exit(1);
--- 387,393 ----
break;
}
}
! if (valid == 0) {
printf("%s is unacceptable as a new shell.\n",
newshell);
exit(1);
---
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SENDER : Andy Linton PHONE : +44 91 232 9233
POST : Computing Lab, University of Newcastle upon Tyne, UK, NE1 7RU
ARPA : andy%cheviot.newcastle.ac.uk@cs.ucl.ac.uk
JANET : andy@uk.ac.newcastle.cheviot
UUCP : andy@cheviot.UUCP
*** Ni fui moran beagan d'aon rud, ach is fui moran beagan ceille. ***