Sync the adduser(8) command with FreeBSD. Summary:
authorMatthias Schmidt <matthias@dragonflybsd.org>
Fri, 28 Dec 2007 16:37:10 +0000 (16:37 +0000)
committerMatthias Schmidt <matthias@dragonflybsd.org>
Fri, 28 Dec 2007 16:37:10 +0000 (16:37 +0000)
 o Check if a user already exists
 o Correct nologin path (was /usr/sbin instead of /sbin)
 o Man page fixes (mostly typos and some rewording)

usr.sbin/adduser/adduser.8
usr.sbin/adduser/adduser.conf.5
usr.sbin/adduser/adduser.sh
usr.sbin/adduser/rmuser.8

index b590e50..aad06be 100644 (file)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/usr.sbin/adduser/adduser.8,v 1.55 2004/06/06 17:55:55 mtm Exp $
-.\" $DragonFly: src/usr.sbin/adduser/adduser.8,v 1.4 2007/05/17 08:19:03 swildner Exp $
+.\" $FreeBSD: src/usr.sbin/adduser/adduser.8,v 1.60 2007/10/20 00:45:31 mtm Exp $
+.\" $DragonFly: src/usr.sbin/adduser/adduser.8,v 1.5 2007/12/28 16:37:10 matthias Exp $
 .\"
-.Dd March 30, 2004
+.Dd June 7, 2006
 .Dt ADDUSER 8
 .Os
 .Sh NAME
@@ -67,7 +67,9 @@ The user name is restricted to whatever
 .Xr pw 8
 will accept.
 Generally this means it
-may contain only lowercase characters or digits.
+may contain only lowercase characters or digits but cannot begin with the
+.Ql -
+character.
 Maximum length
 is 16 characters.
 The reasons for this limit are historical.
@@ -82,7 +84,7 @@ in
 and recompile the
 world; people have done this and it works, but you will have problems
 with any precompiled programs, or source that assumes the 8-character
-name limit and NIS.
+name limit, such as NIS.
 The NIS protocol mandates an 8-character username.
 If you need a longer login name for e-mail addresses,
 you can define an alias in
@@ -211,7 +213,7 @@ This option makes
 .Ar login_group
 the default.
 .It Fl G Ar groups
-Additional groups.
+Space-separated list of additional groups.
 This option allows the user to specify additional groups to add users to.
 The user is a member of these groups in addition to their login group.
 .It Fl h
@@ -432,6 +434,7 @@ logfile for
 .Xr login.conf 5 ,
 .Xr passwd 5 ,
 .Xr shells 5 ,
+.Xr adding_user 8 ,
 .Xr pw 8 ,
 .Xr pwd_mkdb 8 ,
 .Xr rmuser 8 ,
@@ -463,7 +466,7 @@ This means that shell commands can also be embedded in the message file.
 The
 .Nm
 utility attempts to mitigate the possibility of an attacker using this
-feature by refusing to evaluate the file if it is not owned and writeable
+feature by refusing to evaluate the file if it is not owned and writable
 only by the root user.
 In addition, shell special characters and operators will have to be
 escaped when used in the message file.
index f09dc07..ba0c2e7 100644 (file)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/usr.sbin/adduser/adduser.conf.5,v 1.4 2004/06/13 18:03:39 ru Exp $
-.\" $DragonFly: src/usr.sbin/adduser/adduser.conf.5,v 1.1 2004/06/21 17:47:12 cpressey Exp $
+.\" $FreeBSD: src/usr.sbin/adduser/adduser.conf.5,v 1.6 2007/04/12 08:39:13 ceri Exp $
+.\" $DragonFly: src/usr.sbin/adduser/adduser.conf.5,v 1.2 2007/12/28 16:37:10 matthias Exp $
 .\"
-.Dd March 30, 2004
+.Dd April 12, 2007
 .Dt ADDUSER.CONF 5
 .Os
 .Sh NAME
 .Xr adduser 8
 configuration file
 .Sh DESCRIPTION
+The 
+.Pa /etc/adduser.conf
+file is automatically generated by the
+.Xr adduser 8
+utility when invoked with the
+.Fl C
+command-line option.
+It is not meant to be edited by hand.
+.Pp
 The
 .Pa /etc/adduser.conf
 file is used to pre-set certain configuration options for
@@ -162,7 +171,7 @@ option.
 .It Va ugecos
 The default information to be held in the GECOS field of
 .Pa /etc/master.passwd .
-.It Va uuid
+.It Va uidstart
 The default user ID setting.
 This must be a number above 1000 and fewer than 65534.
 .El
@@ -200,6 +209,14 @@ The
 .Nm
 manual page first appeared in
 .Fx 5.3 .
+.Sh BUGS
+The internal variables documented here may change without notice.
+Do not rely on them.
+To modify this file invoke
+.Xr adduser 8
+with the
+.Fl C
+option instead.
 .Sh AUTHORS
 This manual page was written by
 .An Tom Rhodes Aq trhodes@FreeBSD.org .
index f703190..1ed6071 100644 (file)
@@ -24,8 +24,8 @@
 #
 #       Email: Mike Makonnen <mtm@FreeBSD.Org>
 #
-# $FreeBSD: src/usr.sbin/adduser/adduser.sh,v 1.23 2004/06/06 17:55:55 mtm Exp $
-# $DragonFly: src/usr.sbin/adduser/adduser.sh,v 1.1 2004/06/21 17:47:12 cpressey Exp $
+# $FreeBSD: src/usr.sbin/adduser/adduser.sh,v 1.31 2007/10/20 00:45:31 mtm Exp $
+# $DragonFly: src/usr.sbin/adduser/adduser.sh,v 1.2 2007/12/28 16:37:10 matthias Exp $
 #
 
 # err msg
@@ -114,7 +114,7 @@ valid_shells() {
                esac
        done
 
-       # /usr/sbin/nologin is a special case
+       # /sbin/nologin is a special case
        [ -x "${NOLOGIN_PATH}" ] && echo -n " ${NOLOGIN}"
 }
 
@@ -127,6 +127,17 @@ fullpath_from_shell() {
        _shell=$1
        [ -z "$_shell" ] && return 1
 
+       # /sbin/nologin is a special case; it needs to be handled
+       # before the cat | while loop, since a 'return' from within
+       # a subshell will not terminate the function's execution, and
+       # the path to the nologin shell might be printed out twice.
+       #
+       if [ "$_shell" = "${NOLOGIN}" -o \
+           "$_shell" = "${NOLOGIN_PATH}" ]; then
+               echo ${NOLOGIN_PATH}
+               return 0;
+       fi
+
        cat ${ETCSHELLS} |
        while read _path _junk ; do
                case "$_path" in
@@ -142,12 +153,6 @@ fullpath_from_shell() {
                esac
        done
 
-       # /usr/sbin/nologin is a special case
-       if [ "$_shell" = "${NOLOGIN}" ]; then
-               echo ${NOLOGIN_PATH}
-               return 0;
-       fi
-
        return 1
 }
 
@@ -195,6 +200,7 @@ save_config() {
        echo "udotdir=$udotdir"         >> ${ADDUSERCONF}
        echo "msgfile=$msgfile"         >> ${ADDUSERCONF}
        echo "disableflag=$disableflag" >> ${ADDUSERCONF}
+       echo "uidstart=$uidstart"       >> ${ADDUSERCONF}
 }
 
 # add_user
@@ -342,13 +348,19 @@ get_user() {
                        _input="`echo "$fileline" | cut -f1 -d:`"
                fi
 
-               # There *must* be a username. If this is an interactive
-               # session give the user an opportunity to retry.
+               # There *must* be a username, and it must not exist. If
+               # this is an interactive session give the user an
+               # opportunity to retry.
                #
                if [ -z "$_input" ]; then
                        err "You must enter a username!"
                        [ -z "$fflag" ] && continue
                fi
+               ${PWCMD} usershow $_input > /dev/null 2>&1
+               if [ "$?" -eq 0 ]; then
+                       err "User exists!"
+                       [ -z "$fflag" ] && continue
+               fi
                break
        done
        username="$_input"
@@ -447,9 +459,6 @@ get_uid() {
        _input=
        _prompt=
 
-       # No need to take down uids for a configuration saving run.
-       [ -n "$configflag" ] && return
-
        if [ -n "$uuid" ]; then
                _prompt="Uid [$uuid]: "
        else
@@ -584,21 +593,22 @@ input_from_file() {
        while read -r fileline ; do
                case "$fileline" in
                \#*|'')
-                       return 0
                        ;;
-               esac
-
-               get_user || continue
-               get_gecos
-               get_uid
-               get_logingroup
-               get_class
-               get_shell
-               get_homedir
-               get_password
-               get_expire_dates
+               *)
+                       get_user || continue
+                       get_gecos
+                       get_uid
+                       get_logingroup
+                       get_class
+                       get_shell
+                       get_homedir
+                       get_password
+                       get_expire_dates
+                       ugroups="$defaultgroups"
 
-               add_user
+                       add_user
+                       ;;
+               esac
        done
 }
 
@@ -792,7 +802,7 @@ input_interactive() {
        return 0
 }
 
-#### END SUBROUTINE DEFENITION ####
+#### END SUBROUTINE DEFINITION ####
 
 THISCMD=`/usr/bin/basename $0`
 DEFAULTSHELL=/bin/sh
@@ -802,7 +812,7 @@ MAILCMD="${MAILCMD:-mail}"
 ETCSHELLS="${ETCSHELLS:-/etc/shells}"
 NOHOME="/nonexistent"
 NOLOGIN="nologin"
-NOLOGIN_PATH="/usr/sbin/nologin"
+NOLOGIN_PATH="/sbin/nologin"
 GREPCMD="/usr/bin/grep"
 DATECMD="/bin/date"
 
index 1c3f2e8..cb10476 100644 (file)
@@ -24,8 +24,8 @@
 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/usr.sbin/adduser/rmuser.8,v 1.23 2004/06/08 14:52:55 csjp Exp $
-.\" $DragonFly: src/usr.sbin/adduser/rmuser.8,v 1.4 2007/05/17 08:19:03 swildner Exp $
+.\" $FreeBSD: src/usr.sbin/adduser/rmuser.8,v 1.25 2006/12/05 23:20:14 ceri Exp $
+.\" $DragonFly: src/usr.sbin/adduser/rmuser.8,v 1.5 2007/12/28 16:37:10 matthias Exp $
 .\"
 .Dd May 10, 2002
 .Dt RMUSER 8
@@ -130,7 +130,7 @@ Anything following a hash mark
 including the hash mark itself, is considered a comment and will not
 be processed.
 If the file is owned by anyone other than a user with
-UID 0, or is writeable by anyone other than the owner,
+UID 0, or is writable by anyone other than the owner,
 .Nm
 will refuse to continue.
 .It Fl y