136 lines
3.1 KiB
Bash
136 lines
3.1 KiB
Bash
#!/bin/sh
|
|
#
|
|
# @(#)add_user 1.1 94/10/31 SMI
|
|
#
|
|
# add user script for use with sys-config
|
|
# arguments: uname uid gid fullname homedir shell
|
|
#
|
|
|
|
# dirname is in SystemV catagory - so put it herein
|
|
shdirname()
|
|
{
|
|
expr \
|
|
${1-.}'/' : '\(/\)[^/]*//*$' \
|
|
\| ${1-.}'/' : '\(.*[^/]\)//*[^/][^/]*//*$' \
|
|
\| .
|
|
}
|
|
|
|
myname=`basename $0`
|
|
Passwd=/etc/passwd
|
|
PATH=$PATH:/usr/ucb
|
|
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
|
|
if [ $# -ne 6 ]; then
|
|
echo "${myname}: invalid number of arguments"
|
|
echo " usage: ${myname} uname uid gid \"fullname\" homedir shell"
|
|
exit 1
|
|
fi
|
|
|
|
# put args into named variables
|
|
uname=$1
|
|
uid=$2
|
|
gid=$3
|
|
fullname=$4
|
|
homedir=$5
|
|
shell=$6
|
|
|
|
# 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}:${fullname}:${homedir}:${shell}"
|
|
# XXX sould we use tmp file and rename it?
|
|
( echo '$' ;
|
|
echo 'i' ;
|
|
echo "${pwent}" ;
|
|
echo '.' ;
|
|
echo 'w' ;
|
|
echo 'q' ) | ed -s ${Passwd} > /dev/null
|
|
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/etc/chown ${uname} ${homedir}
|
|
/bin/chgrp ${gid} ${homedir}
|
|
|
|
# add default user startup files
|
|
cp /usr/lib/Cshrc ${homedir}/.cshrc
|
|
cp /usr/lib/Login ${homedir}/.login
|
|
cp /usr/lib/.sunview ${homedir}/.sunview
|
|
cp /usr/lib/.rootmenu ${homedir}/.rootmenu
|
|
/usr/etc/chown -R ${uname} ${homedir}
|
|
/bin/chgrp -R ${gid} ${homedir}
|
|
|
|
# is ok, exit 0
|
|
exit 0
|