#!/bin/ksh
# Add a user to LDAP
# Written 12/10/06 - KT

export TOPDIR=/usr/local/lib/ldap
. ${TOPDIR}/etc/vars

if [ ! $LDAPDOMAIN ]
then
	LDAPDOMAIN=$DEFAULTLDAPDOMAIN
fi

DNDOMAIN=`echo $LDAPDOMAIN | sed -e "s/^/dc=/g" -e "s/\./,dc=/g"`
TODAY=`${TOPDIR}/bin/dse`

if echo $* | grep "\-u"
then
        OPTS=l:f:s:c:u:g:d:p:t:m:e
	UID=
else
        OPTS=l:f:s:c:g:d:p:t:m:e
        UID=`/usr/local/scripts/nextuid`
fi

usage() {
	echo "Usage: $0 -l username -f first -s surname -c command_shell -u uid -g gid -d homedir -p password -t telephone -m mobilephone -e email_address"
}

USER=
FIRST=
LAST=
SHELL=
GID=
HOMEDIR=
PWHASH=
PHONE=
MOBILE=
MAIL=

# while getopts l:f:s:c:u:g:d:p:t:m:e: name
while getopts $OPTS name
do
	case $name in
	l)
		lflag=1
		USER="$OPTARG"
	;;
	f)
		fflag=1
		FIRST="$OPTARG"
	;;
	s)
		sflag=1
		LAST="$OPTARG"
	;;
	c)
		cflag=1
		SHELL="$OPTARG"
	;;
	u)
		uflag=1
		UID="$OPTARG"
	;;
	g)
		gflag=1
		GID="$OPTARG"
	;;
	d)
		dflag=1
		HOMEDIR="$OPTARG"
	;;
	p)
		pflag=1
		PASSWD="$OPTARG"
		PWHASH=`${TOPDIR}/bin/dspw $PASSWD | tail -1 | awk ' { print $NF } ' | sed -e "s/{CRYPT}//"`
	;;
	t)
		tflag=1
		PHONE="$OPTARG"
	;;
	m)
		mflag=1
		MOBILE="$OPTARG"
	;;
	e)
		eflag=1
		if echo $EMAIL | grep @ > /dev/null
		then
			EMAIL="$OPTARG"
		else
			EMAIL=$USER@foo.bar
		fi
	;;
	?)
		usage
          	exit 2
	;;
	esac
done

for OPT in `echo $OPTS | sed -e "s/:/ /g"`
do
	EFLAG=${OPT}flag
	if [ $EFLAG -ne 1 ]
	then
		usage
		exit 1
	fi
done

cat ${LDIFTMPLTDIR}/adduser.ldif | sed -e "s/USER/${USER}/" -e "s/UID/${UID}/" -e "s/GID/${GID}/" -e "s/FIRST/${FIRST}/" -e "s/LAST/${LAST}/" -e "s%SHELL%${SHELL}%" -e "s%HOMEDIR%${HOMEDIR}%" -e "s/DNDOMAIN/${DNDOMAIN}/" -e "s/PHONE/${PHONE}/" -e "s/CELL/${CELL}/" -e "s/TODAY/${TODAY}/" -e "s%PWHASH%${PWHASH}%" > ${WORKDIR}/adduser-${USER}.ldif

ldapmodify -x -w $DIRMGRPW -D "cn=Directory Manager" -h $LDAPSERVER -f ${WORKDIR}/adduser-${USER}.ldif
if [ $? -eq 0 ]
then
        mv ${WORKDIR}/adduser-${USER}.ldif ${ADDEDDIR}
else
        echo "Error adding user $USER"
        exit 1
fi
