#!/bin/bash # # vpopmail_admind # Copyright 2004, Bill Shupp # Version: 1.0 (initial release) # # This is a simple shell script to allow remote addition and deletion of # vpopmail users, to be run from tcpserver. It supports only a few commands: # # quit # user # pass # adduser # deluser # # NOTES: authentication must succeed before the adduser/deluser commands will # be accepted. quit may be issued at any time. Incorrect number of arguments # to any command other than quit will result in "-ERR syntax error". # # # # Sample run script for tcpserver: # ##!/bin/sh #exec /usr/local/bin/softlimit -m 8000000 \ # /usr/local/bin/tcpserver -v -H -R -l 0 \ # -x /home/vpopmail/etc/vpopmail_admind.cdb \ # -u `id -u vpopmail` -g `id -g vpopmail` 0 2112 \ # /usr/local/sbin/vpopmail_admind 2>&1 # # # Sample run script for multilog: #!/bin/sh #exec /usr/local/bin/setuidgid vpopmail /usr/local/bin/multilog t /var/log/vpopmail_admind # CONFGURATION OPTIONS VADDUSER=/home/vpopmail/bin/vadduser VDELUSER=/home/vpopmail/bin/vdeluser USER='admin' PASS='testpass' ################### SHOULD NOT NEED TO EDIT BELOW HERE ######################## # FUNCTIONS strip_return () { echo ${1} | sed -e 's/\r//g' } # AUTHENTICATION HAVEUSER=0 HAVEPASS=0 echo "+OK" while [ $HAVEUSER != 1 ] && [ $HAVEPASS != 1 ] ; do # GET USERNAME via USER command read COMMANDFROMSHELL ARGUMENT1 COMMAND=`strip_return $COMMANDFROMSHELL | awk '{ print toupper($1) }'` if [ "$COMMAND" = "QUIT" ] ; then echo "+OK" exit fi if [ "$COMMAND" != "USER" ] ; then echo "-ERR authentication first" continue fi if [ -z "$ARGUMENT1" ] ; then echo "-ERR syntax error" continue else HAVEUSER=1 USERGIVEN=`strip_return ${ARGUMENT1}` fi echo "+OK" # GET PASS via PASS command read COMMANDFROMSHELL ARGUMENT1 COMMAND=`strip_return "$COMMANDFROMSHELL" | awk '{ print toupper($1) }'` if [ "$COMMAND" = "QUIT" ] ; then echo "+OK" exit fi if [ "$COMMAND" != "PASS" ] ; then echo "-ERR authentication first" continue fi if [ -z "$ARGUMENT1" ] ; then echo "-ERR syntax error" continue else HAVEPASS=1 PASSGIVEN=`strip_return ${ARGUMENT1}` fi done if [ "${USERGIVEN}" != "${USER}" ] || [ "${PASSGIVEN}" != "${PASS}" ] ; then echo "-ERR authentication failed" exit else echo "+OK" fi # AUTHENTICATION COMPLETE # GET COMMAND HAVECOMMAND=0 while [ $HAVECOMMAND != 1 ] ; do # GET COMMAND read COMMANDFROMSHELL ARG1 ARG2 COMMAND=`strip_return ${COMMANDFROMSHELL} | awk '{ print toupper($1) }'` ARGUMENT1=`strip_return ${ARG1}` ARGUMENT2=`strip_return ${ARG2}` if [ "$COMMAND" = "QUIT" ] ; then echo "+OK" exit fi if [ "$COMMAND" != "ADDUSER" ] && [ "$COMMAND" != "DELUSER" ] ; then echo "-ERR unimplemented" continue fi if [ "$COMMAND" = "ADDUSER" ] ; then if [ -z "$ARGUMENT1" ] ; then echo "-ERR syntax error" continue fi if [ -z "$ARGUMENT2" ] ; then echo "-ERR syntax error" continue fi RESULT=`$VADDUSER $ARGUMENT1 $ARGUMENT2` if [ "$?" -ne 0 ] ; then echo "-ERR $RESULT" echo "$RESULT:$COMMAND $ARGUMENT1 $ARGUMENT2" 1>&2 # Log Error echo "ERROR: $VADDUSER $ARGUMENT1 $ARGUMENT2 - $RESULT" 1>&2 else echo "+OK" # Log Success echo "Added $ARGUMENT1 with pass $ARGUMENT2" 1>&2 fi fi if [ "$COMMAND" = "DELUSER" ] ; then if [ -z "$ARGUMENT1" ] ; then echo "-ERR syntax error" continue fi if [ ! -z "$ARGUMENT2" ] ; then echo "-ERR syntax error" continue fi RESULT=`$VDELUSER $ARGUMENT1` if [ "$?" -ne 0 ] ; then echo "-ERR $RESULT" # Log Error echo "ERROR: $VDELUSER $ARGUMENT1 $ARGUMENT2 - $RESULT" 1>&2 else echo "+OK" echo "Deleted $ARGUMENT1" 1>&2 fi fi done