231 lines
6.5 KiB
Bash
Executable File
231 lines
6.5 KiB
Bash
Executable File
#! /bin/sh
|
|
#
|
|
# adduser 1.0: a utility to add users to the system
|
|
# Copyright (C) 1994 Ian A. Murdock <imurdock@shell.portal.com>
|
|
# Sorry Ian, dud was ere.
|
|
# Modified by Marc Ewing <marc@redhat.com> for RHS Linux
|
|
# Modified by gac@eng.rau.ac.za, adw@chopin.rau.ac.za, fwo@eng.rau.ac.za,
|
|
# eddie@rau.ac.za to work great with mars and samba
|
|
|
|
# Enhancements: Automagically creates user on mars server side....
|
|
# Please edit the login script of supervisor user to link into this
|
|
# script...
|
|
# Updates a birthday reminder database
|
|
# updates an expiry database
|
|
# ensures an ftp-only shell
|
|
|
|
# Everything happens too fast, so don't let the user interrupt.
|
|
trap "" 1 2 3 15
|
|
|
|
# Set a few important variables before getting started.
|
|
NUMARG=$#
|
|
LOGIN="$1"
|
|
FNAME="$2"
|
|
OFFICE="$3"
|
|
WTEL="$4"
|
|
HTEL="$5"
|
|
BDATE="$6"
|
|
EXIST=0
|
|
NOHOME="$7"
|
|
|
|
PASSWD="/etc/passwd"
|
|
PBAK="/etc/passwd-" # Some programs use /etc/passwd-, others use
|
|
# /etc/passwd.OLD. Take your pick.
|
|
|
|
GROUP="/etc/group"
|
|
GBAK="/etc/group-"
|
|
|
|
PLOCK="/etc/ptmp" # Standard method of locking the password file.
|
|
|
|
DSHELL="/etc/ftponly"
|
|
DHOME="/hamster/home" # modify this to point to base home dirs.
|
|
SKEL="/etc/skel"
|
|
SPOOL="/var/spool/mail"
|
|
FIRST_UID=500
|
|
FIRST_GID=500
|
|
|
|
# A few sanity checks...
|
|
if [ `id -u` != 0 ]; then
|
|
echo "Only root may add users to the system." ; exit 1
|
|
fi
|
|
|
|
if [ $NUMARG = 0 ]; then
|
|
echo "You need to specify the login to add; for example, \`adduser" \
|
|
"imurdock'." ;
|
|
echo "e.g. ohmasteruser username fullname office worktel hometel birthdate";
|
|
exit 1
|
|
fi
|
|
|
|
id $LOGIN >/dev/null 2>/dev/null && EXIST=1
|
|
|
|
if [ $EXIST = 1 ]; then
|
|
echo "The login $LOGIN already exists."
|
|
exit 1
|
|
fi
|
|
|
|
if [ -f $PLOCK ]; then
|
|
echo "$PASSWD is locked. Try again later." ; exit 1
|
|
fi
|
|
|
|
# And now the program begins:
|
|
cp $PASSWD /etc/passwd.tmp
|
|
cp $GROUP /etc/group.tmp
|
|
echo "" ; echo -n "Looking for first available UID..."
|
|
NUID=`cut -f 3 -d ":" $PASSWD | sort -n | awk -v uid=$FIRST_UID '
|
|
{ if ($1 == uid) uid = uid + 1; }
|
|
END { print uid; }
|
|
'`
|
|
|
|
if [ $NUID -ge 65536 ]; then
|
|
echo "Sorry, ran out of uids."
|
|
exit 1
|
|
fi
|
|
echo " $NUID"
|
|
|
|
|
|
echo -n "Looking for first available GID..."
|
|
NGID=`cut -f 3 -d ":" $GROUP | sort -n | awk -v gid=$FIRST_GID '
|
|
{ if ($1 == gid) gid = gid + 1; }
|
|
END { print gid; }
|
|
'`
|
|
|
|
if [ $NGID -lt $FIRST_GID ]; then
|
|
NGID=$FIRST_GID
|
|
fi
|
|
echo " $NGID"
|
|
|
|
echo "" ; echo -n "Adding login: $LOGIN..."
|
|
touch $PLOCK ;
|
|
|
|
cp $PASSWD $PBAK
|
|
echo "$LOGIN:*:$NUID:$NGID:New User:$DHOME/./$LOGIN:$DSHELL" >> $PASSWD
|
|
|
|
# Add user to users group
|
|
cp $GROUP $GBAK
|
|
sed "s/^\(users.*[^:]\)\$/\1,$LOGIN/" < $GBAK |
|
|
sed "s/^\(users.*:\)\$/\1$LOGIN/" > $GROUP
|
|
|
|
#sed "s/^\(users.*[^:]\)$/\1,$LOGIN/" < $GBAK |
|
|
#sed "s/^\(users.*:\)$/\1,$LOGIN/" > $GROUP
|
|
|
|
# Add user to httpd group
|
|
cp $GROUP $GBAK
|
|
sed "s/^\(httpd.*[^:]\)\$/\1,$LOGIN/" < $GBAK |
|
|
sed "s/^\(httpd.*:\)\$/\1$LOGIN/" > $GROUP
|
|
|
|
echo "$LOGIN::$NGID:$LOGIN" >> $GROUP
|
|
|
|
rm -f $PLOCK
|
|
echo "done."
|
|
|
|
if [ "x$NOHOME" = "x" ]; then
|
|
echo -n "Creating home directory: $DHOME/$LOGIN..."
|
|
mkdir $DHOME/$LOGIN
|
|
chmod 2770 $DHOME/$LOGIN
|
|
cp -a $SKEL/.??* $SKEL/* $DHOME/$LOGIN >/dev/null 2>/dev/null
|
|
chown -R $NUID.$NGID $DHOME/$LOGIN
|
|
echo "done."
|
|
fi
|
|
|
|
echo -n "Creating mailbox: $SPOOL/$LOGIN..."
|
|
touch $SPOOL/$LOGIN ; chmod 660 $SPOOL/$LOGIN ; chown $NUID.mail $SPOOL/$LOGIN
|
|
echo $LOGIN >> /etc/ohmaillist
|
|
echo "0" > /tmp/mail/$LOGIN
|
|
echo "Done.."
|
|
|
|
echo ""
|
|
echo "Don't forget to set the password."
|
|
if [ "x$NOHOME" != "x" ]; then
|
|
echo ""
|
|
echo "The home directory for $LOGIN was set to $DHOME/$LOGIN but the directory"
|
|
echo "was not created. Be sure that you set it up properly."
|
|
fi
|
|
|
|
if [ "x$FNAME" = "x" ] ; then # Added to show account expiry times..
|
|
passwd $LOGIN # creates /etc/expiry
|
|
chfn $LOGIN
|
|
echo -n "Expiry date: (mm-yy) "
|
|
read expiry
|
|
echo "$LOGIN:$expiry" >> /etc/expiry
|
|
echo -n "Birthdate: (e.g. Oct 24) "
|
|
read BDATE
|
|
echo "$LOGIN:$FNAME:$BDATE:Happy Birthday!" >> /etc/birthdays
|
|
else
|
|
# echo "default" | passwd -P $LOGIN
|
|
FNAME=`echo "$FNAME" | sed 's/[,:]/ /g'`
|
|
OFFICE=`echo "$OFFICE" | sed 's/[:,]/ /g'`
|
|
WTEL=`echo "$WTEL" | sed 's/[:,]/ /g'`
|
|
HTEL=`echo "$HTEL" | sed 's/[:,]/ /g'`
|
|
chfn -f "$FNAME" -r "$OFFICE" -w "$WTEL" -h "$HTEL" $LOGIN
|
|
expiry="12-97"
|
|
echo "$LOGIN:$expiry" >> /etc/expiry
|
|
echo "$LOGIN:$FNAME:$BDATE:Happy Birthday!" >> /etc/birthdays
|
|
fi
|
|
|
|
echo -n "Creating an example www home page..."
|
|
mkdir $DHOME/httpd/html/$LOGIN # point to your webroot
|
|
chown $NUID.$NGID $DHOME/httpd/html/$LOGIN
|
|
chmod 755 $DHOME/httpd/html/$LOGIN
|
|
LONGNAME="`grep "^$LOGIN:" $PASSWD | cut -f 5 -d : - | cut -f 1 -d , -`"
|
|
/usr/sbin/wwwhomepage "$LONGNAME" $LOGIN > $DHOME/httpd/html/$LOGIN/index.htm
|
|
chown $NUID.httpd $DHOME/httpd/html/$LOGIN/index.htm
|
|
chmod 755 $DHOME/httpd/html/$LOGIN/index.htm
|
|
cp /etc/.htaccess $DHOME/httpd/html/$LOGIN/.htaccess
|
|
chmod 644 $DHOME/httpd/html/$LOGIN/.htaccess
|
|
chown root.httpd $DHOME/httpd/html/$LOGIN/.htaccess
|
|
pushd . > /dev/null
|
|
cd $DHOME/$LOGIN
|
|
ln -s ../httpd/html/$LOGIN www
|
|
popd > /dev/null
|
|
echo "Done..."
|
|
|
|
echo "Updating myusers.html"
|
|
$DHOME/httpd/cgi-bin/nph-users > /$DHOME/httpd/html/myusers.html
|
|
chmod 755 $DHOME/httpd/html/myusers.html
|
|
|
|
# Now for the COOOL part: creates users in mars space so that when supervisor
|
|
# logs on, new users are created automagically on the novell side so that
|
|
# user is immediately available on mars.
|
|
# Please have a look at the modified batch file that supervisor login script
|
|
# points to.....
|
|
|
|
echo "Updating Novell user ID"
|
|
echo -e "#NO_HOME_DIRECTORY\r\n" >> /hamster/home/supervis/users.usr
|
|
|
|
echo -e "#CREATE $LOGIN;$LONGNAME;default^\r\n" >> /hamster/home/supervis/users.usr
|
|
|
|
# Change nw-admin to your admin account on the mars side.
|
|
|
|
chown nw-admin.nw-admin /hamster/home/supervis/users.usr
|
|
|
|
# The following updates a dummy ftp passwd file that shows correct user and
|
|
# group stuff when a user ftp's to the server
|
|
|
|
echo "Updating ftp passwd file"
|
|
cat /etc/passwd | cut -f 1,3,4,5,6,7,8,9,10 -d : - | sed s/:/:*:/ > $DHOME/etc/passwd
|
|
cp /etc/group $DHOME/etc/group
|
|
|
|
# The next section creates default disk storage space for users, using
|
|
# user wvdw as template. Please man quota to see how disk quotas works..
|
|
|
|
echo "Applying system default disk storage quotas..."
|
|
/usr/sbin/edquota -p wvdw $LOGIN
|
|
|
|
echo ""
|
|
echo "Supervisor, please log on to the Mars server to update the user's Novell login."
|
|
echo ""
|
|
|
|
# Some sanity checks, if the diff between count is more than one then this
|
|
# script messed up.
|
|
|
|
echo "Word and linecount of passwd file:"
|
|
wc /etc/passwd.tmp
|
|
wc $PASSWD
|
|
echo "Wordcount of group files:"
|
|
wc /etc/group.tmp
|
|
wc $GROUP
|
|
|
|
# Yip, we're fin..
|
|
echo "OK, Patricia lets go!"
|
|
# EOF
|