bin/71786: adduser breaks if /sbin/nologin is included in
/etc/shells
Peter Pentchev
roam at ringlet.net
Thu Sep 16 04:50:25 PDT 2004
The following reply was made to PR bin/71786; it has been noted by GNATS.
From: Peter Pentchev <roam at ringlet.net>
To: bug-followup at FreeBSD.org
Cc: andrew.hayden at gmail.com
Subject: Re: bin/71786: adduser breaks if /sbin/nologin is included in /etc/shells
Date: Thu, 16 Sep 2004 14:45:32 +0300
On Thu, Sep 16, 2004 at 11:31:18AM +0000, Peter Pentchev wrote:
[snip]
> It seems that there is indeed a problem in adduser's handling of the
> nologin shell. In the fullpath_from_shell() function, the 'return'
> within the while/case/if will only return from the new shell instance
> created due to the "cat ${ETCSHELLS}" pipe, and will *not* stop the
> shell from executing the nologin special case test. Thus,
> fullpath_from_shell() will output *two* lines containing nologin, and
> those two lines will be what is added to the end of master.passwd's new
> user line.
>
> Can you try the following patch? Basically, in the
> fullpath_from_shell() function, move the nologin special case test
> before the cat | while loop.
FWIW, for 6.x-CURRENT and 5.3-BETA this patch would assume the following
shape. Source committers, please treat this as a request for pre-commit
review - I could commit this if no one has any objections:
Index: src/usr.sbin/adduser/adduser.sh
===================================================================
RCS file: /home/ncvs/src/usr.sbin/adduser/adduser.sh,v
retrieving revision 1.24
diff -u -r1.24 adduser.sh
--- src/usr.sbin/adduser/adduser.sh 28 Aug 2004 14:32:10 -0000 1.24
+++ src/usr.sbin/adduser/adduser.sh 16 Sep 2004 11:43:23 -0000
@@ -126,6 +126,13 @@
_shell=$1
[ -z "$_shell" ] && return 1
+ # /usr/sbin/nologin is a special case
+ if [ "$_shell" = "${NOLOGIN}" -o \
+ "$_shell" = "${NOLOGIN_PATH}" ]; then
+ echo ${NOLOGIN_PATH}
+ return 0;
+ fi
+
cat ${ETCSHELLS} |
while read _path _junk ; do
case "$_path" in
@@ -141,13 +148,6 @@
esac
done
- # /usr/sbin/nologin is a special case
- if [ "$_shell" = "${NOLOGIN}" -o \
- "$_shell" = "${NOLOGIN_PATH}" ]; then
- echo ${NOLOGIN_PATH}
- return 0;
- fi
-
return 1
}
G'luck,
Peter
--
Peter Pentchev roam at ringlet.net roam at cnsys.bg roam at FreeBSD.org
PGP key: http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553
This sentence was in the past tense.
More information about the freebsd-bugs
mailing list