Thread View: net.bugs.4bsd
1 messages
1 total messages
Started by Arnold D. Robbins {EUCC}
Thu, 23 Oct 1986 04:32
4.3 vipw does not allow root to have a shell in /etc/shells
Author: Arnold D. Robbins {EUCC}
Date: Thu, 23 Oct 1986 04:32
Date: Thu, 23 Oct 1986 04:32
110 lines
2983 bytes
2983 bytes
Subject: 4.3 vipw does not allow root to have a shell in /etc/shells
Index: /usr/src/etc/vipw.c 4.3BSD
Description:
/* fall through ... */
Repeat-By:
Edit the password file with vipw, and try to change root's shell
to a shell listed in /etc/shells, but not /bin/sh or /bin/csh,
(e.g., /bin/ksh). Watch vipw complain about mangling the password
file.
Fix:
RCS file: RCS/vipw.c,v
retrieving revision 1.1
diff -c -r1.1 vipw.c
*** /tmp/,RCSt1007105 Wed Oct 22 18:02:04 1986
--- vipw.c Thu Aug 7 15:01:37 1986
***************
*** 1,9 ****
#ifndef lint
! static char *RCSid = "$Header: vipw.c,v 1.1 86/08/06 17:47:40 root Exp $";
#endif
/*
* $Log: vipw.c,v $
* Revision 1.1 86/08/06 17:47:40 root
* Initial revision
*
--- 1,15 ----
#ifndef lint
! static char *RCSid = "$Header: vipw.c,v 1.3 86/08/07 15:01:19 root Locked $";
#endif
/*
* $Log: vipw.c,v $
+ * Revision 1.3 86/08/07 15:01:19 root
+ * Made error message more descriptive for invalid root entry. ADR.
+ *
+ * Revision 1.2 86/08/06 17:56:44 root
+ * fixed to check root's shell against list of valid shells.
+ *
* Revision 1.1 86/08/06 17:47:40 root
* Initial revision
*
***************
*** 140,147 ****
if (strncmp(++cp, "/:", 2))
break;
cp += 2;
! if (*cp && strcmp(cp, "/bin/sh") &&
! strcmp(cp, "/bin/csh"))
break;
ok++;
}
--- 146,152 ----
if (strncmp(++cp, "/:", 2))
break;
cp += 2;
! if (*cp && ! validsh (cp))
break;
ok++;
}
***************
*** 153,162 ****
exit(0);
} else
fprintf(stderr,
! "vipw: you mangled the temp file, %s unchanged\n",
passwd);
}
bad:
unlink(temp);
exit(1);
}
--- 158,186 ----
exit(0);
} else
fprintf(stderr,
! "vipw: there are problems with root's entry, %s unchanged\n",
passwd);
}
bad:
unlink(temp);
exit(1);
+ }
+
+ int validsh (rootsh)
+ char *rootsh;
+ {
+ char *sh, *getusershell ();
+ int ret = 0;
+
+ while ((sh = getusershell ()) != NULL)
+ {
+ if (strcmp (sh, rootsh) == 0)
+ {
+ ret = 1;
+ break;
+ }
+ }
+
+ endusershell ();
+ return (ret);
}
--
Arnold Robbins
CSNET: arnold@emory BITNET: arnold@emoryu1
ARPA: arnold%emory.csnet@csnet-relay.arpa
UUCP: { akgua, decvax, gatech, sb1, sb6, sunatl }!emory!arnold
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads