*BSD News Article 6980


Return to BSD News archive

Newsgroups: comp.unix.bsd
Path: sserve!manuel.anu.edu.au!munnari.oz.au!sgiblab!darwin.sura.net!uvaarpa!rucs!bmyers
From: bmyers@rucs2.sunlab.cs.runet.edu (B.Myers)
Subject: Re: adduser program available.
Message-ID: <BwL3oK.5H@rucs2.sunlab.cs.runet.edu>
Organization: Radford University
References: <BwFFuJ.9wv@ibmpcug.co.uk>
Date: Fri, 23 Oct 1992 17:09:55 GMT
Lines: 375

In article <BwFFuJ.9wv@ibmpcug.co.uk> adrian@rachel.ibmpcug.co.uk (Adrian Hall (Systems Manager)) writes:
>
>I got fed up of adding users by hand. So I have written a *small*
>C program to do it for me. (Since I add far too many suers to my
>system anyway, this was a good plan).
>
>Notes:
>
>	(1)	It uses system, so is inherently insecure. Thus
>		you should probably protect the program fairly
>		well as well if you are going to seriously use it.
>
>	(2)	It doesnt copy files into the users directory.
>
>	(3)	All home directories are placed in /home/<group>/<user>
>
>It is available from rachel.ibmpcug.co.uk::~ftp/src/usr.sbin/adduser
>
>Adrian
>


In article <BwFFuJ.9wv@ibmpcug.co.uk> adrian@rachel.ibmpcug.co.uk (Adrian Hall (Systems Manager)) writes:
>
>I got fed up of adding users by hand. So I have written a *small*
>C program to do it for me. (Since I add far too many suers to my
>system anyway, this was a good plan).
>
>Notes:
>
>	(1)	It uses system, so is inherently insecure. Thus
>		you should probably protect the program fairly
>		well as well if you are going to seriously use it.
>
>	(2)	It doesnt copy files into the users directory.
>
>	(3)	All home directories are placed in /home/<group>/<user>
>
>It is available from rachel.ibmpcug.co.uk::~ftp/src/usr.sbin/adduser
>
>Adrian
>

I have posted this to the net before.. and since it seems that others
like myself don't like all the hassels of adding users to their systems
by hand.. I madeup this little script to to the dirty work for you...
it is a shell script, so it should work with any 386bsd machine without
any problems (provided that you have installed the BIN01 distribution)
Hope this helps.. It sure did help me. :)

------------- CUT HERE ---------------
#!/bin/sh
#
# @(#)add_user 1.9 90/10/26 SMI
#
# add user script for use with sys-config
# arguments: uname uid gid fullname homedir shell
#
# Script by Brandon Myers.
# bmyers@rucs2.sunlab.cs.runet.edu
# to execute type:
# sh add_user uname uid gid "full name" homedir shell

myname=`basename $0`
Passwd=/etc/passwd
PATH=$PATH:/usr/bin:/bin:/usr/sbin:/sbin
export PATH
# check for root
if [ "`whoami`x" != "root"x ]; then
   echo "You must be root to do $myname!"
   exit 1
fi

# check for number of args
# Change to 5 if the directories are going to be in the same place
# ie. no homedir option given to the program

if [ $# -ne 6 ]; then 
	echo "${myname}: invalid number of arguments"
	echo "   usage: ${myname} uname uid gid \"fullname\" shell"
	exit 1
fi

# put args into named variables
uname=$1
uid=$2
gid=$3
fullname=$4
homedir=$5  # If all directories are going to be in the same place
shell=$6    # Then change homedir=$5 to homedir=/DIR/../$1 ie: /DIR/../UNAME
            # homedir will be assumed on each call

# checks for validity of arguments
# check uid
if test $uid -lt 10 ; then
	echo  "uid: uid must be greater than 10 and less than 60000"
	exit 1
elif test $uid -gt 60000 ; then 
	echo  "uid: uid must be greater than 10 and less than 60000"
	exit 1
fi

# check gid
if test $gid -lt 10 ; then
	echo  "gid: gid must be greater than 10 and less than 60000"
	exit 1
elif test $gid -gt 60000 ; then 
	echo  "gid: gid must be greater than 10 and less than 60000"
	exit 1
fi


# check shell
if test ! -x $shell ; then
	echo "$shell: the program does not exist or is not executable"
	exit 1
fi

# check homedir
# check if homedir already exists
if [ -f ${homedir} ]; then
	echo "${myname}: WARNING: a file named \"${homedir}\" already exists"
	echo "and is NOT a directory, NOT setting up user account"
	exit 1
fi
if [ -d ${homedir} ]; then
	echo "${myname}: WARNING: home directory \"${homedir}\" already exists"
	echo "    no files copied, NOT setting up user account"
	exit 1
fi
# check if all but last path of homedir exits
#dir=`shdirname $homedir`
#if test ! -d $dir ; then
#	echo "$dir: does not exist or is not a directory"
#	exit 1
#fi
# check if $homedir is local
dfout=`df $dir | ( read aline; read aline; echo $aline )`
case $dfout in
  /dev*) ;; # $dir is on local machine
      *) echo "$dir: is not on local machine"
         exit 1;;
esac

# create a null /etc/passwd entry
# first check if one already exists
if grep -s "^${uname}:" ${Passwd} ; then
	echo "${myname}: ERROR: ${uname} aleady in ${Passwd}";
	exit 1;
fi
# check if uid already exists
if grep -s ".*:.*:${uid}:" ${Passwd} ; then
	echo "uid: ERROR: ${uid} already in ${Passwd}";
	exit 1;
fi
pwent="${uname}::${uid}:${gid}::0:0:${fullname}:${homedir}:${shell}"
# XXX sould we use tmp file and rename it?

rm -f /tmp/passwdentree # remove any previous file passwdentree
( echo "${pwent}"; ) > /tmp/passwdentree
( echo -n 'G';         # Go to end of file
  echo ":r /tmp/passwdentree";  # Read passwdentree as last line
  echo ":wq"; ) | vipw ${Passwd} 2>&1 /dev/null
rm -f /tmp/passwdentree # remove old file

# Verify that the entree was saved.
if grep -s "^${uname}:" ${Passwd} ; then
	:
else
	echo "${myname}: ERROR: password entry didn't go to ${Passwd}";
	exit 1;
fi
# make the home directory
/bin/mkdir ${homedir}
/usr/sbin/chown ${uname} ${homedir}
/usr/bin/chgrp ${gid} ${homedir}

# add default user startup files
cp /usr/lib/Cshrc ${homedir}/.cshrc
cp /usr/lib/Login ${homedir}/.login
cp /usr/lib/.xsession ${homedir}/.xsession
/usr/sbin/chown -R ${uname} ${homedir}
/usr/bin/chgrp -R ${gid} ${homedir}

# is ok, exit 0
exit 0

------- END --------

Hope this helps.
--
Brandon Myers
bmyers@rucs2.sunlab.cs.runet.edu
Newsgroups: comp.unix.bsd
Subject: Re: adduser program available.
Summary: 
Expires: 
References: <BwFFuJ.9wv@ibmpcug.co.uk>
Sender: 
Followup-To: 
Distribution: 
Organization: Radford University
Keywords: 

In article <BwFFuJ.9wv@ibmpcug.co.uk> adrian@rachel.ibmpcug.co.uk (Adrian Hall (Systems Manager)) writes:
>
>I got fed up of adding users by hand. So I have written a *small*
>C program to do it for me. (Since I add far too many suers to my
>system anyway, this was a good plan).
>
>Notes:
>
>	(1)	It uses system, so is inherently insecure. Thus
>		you should probably protect the program fairly
>		well as well if you are going to seriously use it.
>
>	(2)	It doesnt copy files into the users directory.
>
>	(3)	All home directories are placed in /home/<group>/<user>
>
>It is available from rachel.ibmpcug.co.uk::~ftp/src/usr.sbin/adduser
>
>Adrian
>

I have posted this to the net before.. and since it seems that others
like myself don't like all the hassels of adding users to their systems
by hand.. I madeup this little script to to the dirty work for you...
it is a shell script, so it should work with any 386bsd machine without
any problems (provided that you have installed the BIN01 distribution)
Hope this helps.. It sure did help me. :)

------------- CUT HERE ---------------
#!/bin/sh
#
# @(#)add_user 1.9 90/10/26 SMI
#
# add user script for use with sys-config
# arguments: uname uid gid fullname homedir shell
#
# Script by Brandon Myers.
# bmyers@rucs2.sunlab.cs.runet.edu
# to execute type:
# sh add_user uname uid gid "full name" homedir shell

myname=`basename $0`
Passwd=/etc/passwd
PATH=$PATH:/usr/bin:/bin:/usr/sbin:/sbin
export PATH
# check for root
if [ "`whoami`x" != "root"x ]; then
   echo "You must be root to do $myname!"
   exit 1
fi

# check for number of args
# Change to 5 if the directories are going to be in the same place
# ie. no homedir option given to the program

if [ $# -ne 6 ]; then 
	echo "${myname}: invalid number of arguments"
	echo "   usage: ${myname} uname uid gid \"fullname\" shell"
	exit 1
fi

# put args into named variables
uname=$1
uid=$2
gid=$3
fullname=$4
homedir=$5  # If all directories are going to be in the same place
shell=$6    # Then change homedir=$5 to homedir=/DIR/../$1 ie: /DIR/../UNAME
            # homedir will be assumed on each call

# checks for validity of arguments
# check uid
if test $uid -lt 10 ; then
	echo  "uid: uid must be greater than 10 and less than 60000"
	exit 1
elif test $uid -gt 60000 ; then 
	echo  "uid: uid must be greater than 10 and less than 60000"
	exit 1
fi

# check gid
if test $gid -lt 10 ; then
	echo  "gid: gid must be greater than 10 and less than 60000"
	exit 1
elif test $gid -gt 60000 ; then 
	echo  "gid: gid must be greater than 10 and less than 60000"
	exit 1
fi


# check shell
if test ! -x $shell ; then
	echo "$shell: the program does not exist or is not executable"
	exit 1
fi

# check homedir
# check if homedir already exists
if [ -f ${homedir} ]; then
	echo "${myname}: WARNING: a file named \"${homedir}\" already exists"
	echo "and is NOT a directory, NOT setting up user account"
	exit 1
fi
if [ -d ${homedir} ]; then
	echo "${myname}: WARNING: home directory \"${homedir}\" already exists"
	echo "    no files copied, NOT setting up user account"
	exit 1
fi
# check if all but last path of homedir exits
#dir=`shdirname $homedir`
#if test ! -d $dir ; then
#	echo "$dir: does not exist or is not a directory"
#	exit 1
#fi
# check if $homedir is local
dfout=`df $dir | ( read aline; read aline; echo $aline )`
case $dfout in
  /dev*) ;; # $dir is on local machine
      *) echo "$dir: is not on local machine"
         exit 1;;
esac

# create a null /etc/passwd entry
# first check if one already exists
if grep -s "^${uname}:" ${Passwd} ; then
	echo "${myname}: ERROR: ${uname} aleady in ${Passwd}";
	exit 1;
fi
# check if uid already exists
if grep -s ".*:.*:${uid}:" ${Passwd} ; then
	echo "uid: ERROR: ${uid} already in ${Passwd}";
	exit 1;
fi
pwent="${uname}::${uid}:${gid}::0:0:${fullname}:${homedir}:${shell}"
# XXX sould we use tmp file and rename it?

rm -f /tmp/passwdentree # remove any previous file passwdentree
( echo "${pwent}"; ) > /tmp/passwdentree
( echo -n 'G';         # Go to end of file
  echo ":r /tmp/passwdentree";  # Read passwdentree as last line
  echo ":wq"; ) | vipw ${Passwd} 2>&1 /dev/null
rm -f /tmp/passwdentree # remove old file

# Verify that the entree was saved.
if grep -s "^${uname}:" ${Passwd} ; then
	:
else
	echo "${myname}: ERROR: password entry didn't go to ${Passwd}";
	exit 1;
fi
# make the home directory
/bin/mkdir ${homedir}
/usr/sbin/chown ${uname} ${homedir}
/usr/bin/chgrp ${gid} ${homedir}

# add default user startup files
cp /usr/lib/Cshrc ${homedir}/.cshrc
cp /usr/lib/Login ${homedir}/.login
cp /usr/lib/.xsession ${homedir}/.xsession
/usr/sbin/chown -R ${uname} ${homedir}
/usr/bin/chgrp -R ${gid} ${homedir}

# is ok, exit 0
exit 0

------- END --------

Hope this helps.
--
Brandon Myers
bmyers@rucs2.sunlab.cs.runet.edu