head 1.2; access; symbols; locks alexis:1.2; strict; comment @# @; 1.2 date 98.10.25.10.24.29; author alexis; state Exp; branches; next 1.1; 1.1 date 98.10.24.21.15.25; author alexis; state Exp; branches; next ; desc @works @ 1.2 log @some problem @ text @#!SCRIPTSHELLCMD_MARKER PROGNAME=`basename $0` ################################################################################ # # CONFIGURABLE THINGS # ################################################################################ TMP_DIR=/var/tmp HTML_DIR=/home/db/alexis/docs/html/mino-hp DFLT_RETURN_ADDR=alexis SPOOL_DIR=/home/db/alexis/var/spool/mino-mail-server ################################################################################ # # END OF CONFIGURABLE THINGS # ################################################################################ spool_message() { delonexit $TMP_DIR/$PROGNAME.$$.mbx cat > $TMP_DIR/$PROGNAME.$$.mbx FROM=`sed -n "s/^From:.*<\(.*\)>.*/\1/p" $TMP_DIR/$PROGNAME.$$.mbx` [ "X$FROM" != X ] || { echo "WARNING: no return address found, using default" FROM=$DFLT_RETURN_ADDR } DATE=`sed -n "s/^Date:\(.*\)/\1/p" $TMP_DIR/$PROGNAME.$$.mbx | head -1` TIMESTAMP=`echo "$DATE" | sed 's/[^0-9]//g'` [ "X$TIMESTAMP" != X ] || { echo "WARNING: no date found, using default" TIMESTAMP=`date '+%y%m%d%H%M%S'` } lock message-$TIMESTAMP || { echo "ERROR: spool failed, message left in $TMP_DIR/$PROGNAME.$$.mbx" dontdelonexit $TMP_DIR/$PROGNAME.$$.mbx return } mv $TMP_DIR/$PROGNAME.$$.mbx $SPOOL_DIR/message-$TIMESTAMP || { echo "ERROR: spool failed, message left in $TMP_DIR/$PROGNAME.$$.mbx" dontdelonexit $TMP_DIR/$PROGNAME.$$.mbx unlock message-$TIMESTAMP return } rm -f $TMP_DIR/$PROGNAME.$$.mbx dontdelonexit $TMP_DIR/$PROGNAME.$$.mbx unlock message-$TIMESTAMP echo "INFO: new message successfully spooled" } process_queue() { lock daemon JOBCOUNT=0 while :; do MESSAGES=`ls $SPOOL_DIR | egrep '^message-[0-9][0-9]*$' | sort` [ "X$MESSAGES" = X ] && break for MESSAGE in $MESSAGES; do process_message $MESSAGE && JOBCOUNT=`expr $JOBCOUNT + 1` done done if [ $JOBCOUNT -gt 0 ]; then echo "INFO: uploading to Demon's homepage server ..." $HTML_DIR/upload else echo "WARNING: no upload necessary" fi unlock daemon } process_message() { local MESSAGE=$1 echo "INFO: processing $MESSAGE" lock $MESSAGE || { echo "WARNING: another process is accessing $MESSAGE, will try again later" return 1 } delonexit $TMP_DIR/$PROGNAME.$$.pk mkdir -p $TMP_DIR/$PROGNAME.$$.pk || { echo "ERROR: can't create unpacking directory, will try again later" unlock $MESSAGE return 1 } { munpack -C $TMP_DIR/$PROGNAME.$$.pk $SPOOL_DIR/$MESSAGE | egrep -q 'Did not find anything to unpack'; } && { echo "ERROR: unable to unpack, moving to 'bad'" rm -fr $TMP_DIR/$PROGNAME.$$.pk dontdelonexit $TMP_DIR/$PROGNAME.$$.pk mkdir -p $SPOOL_DIR/bad mv $SPOOL_DIR/$MESSAGE $SPOOL_DIR/bad/$MESSAGE unlock $MESSAGE return 1 } ZIPS=`ls $TMP_DIR/$PROGNAME.$$.pk | egrep '\.zip$' | sort` [ "X$ZIPS" = X ] && { echo "WARNING: no zips to process, moving to 'bad'" rm -fr $TMP_DIR/$PROGNAME.$$.pk dontdelonexit $TMP_DIR/$PROGNAME.$$.pk mkdir -p $SPOOL_DIR/bad mv $SPOOL_DIR/$MESSAGE $SPOOL_DIR/bad/$MESSAGE unlock $MESSAGE return 1 } echo "INFO: removing old HTML files before unpacking zip files ..." find $HTML_DIR ! -path $HTML_DIR ! -path $HTML_DIR/upload -print | xargs rm -fr for ZIP in $ZIPS; do echo "INFO: unzipping $ZIP ..." unzip -d $HTML_DIR $TMP_DIR/$PROGNAME.$$.pk/$ZIP done rm $SPOOL_DIR/$MESSAGE unlock $MESSAGE rm -fr $TMP_DIR/$PROGNAME.$$.pk dontdelonexit $TMP_DIR/$PROGNAME.$$.pk return 0 } main() { while [ "X$1" != X ]; do case "$1" in -d) VERBOSE_LEVEL=$2 shift ;; -v) VERBOSE_LEVEL=3 ;; -n) NOSPOOL=true ;; -*) usage ;; *) break ;; esac shift done trap genericsighandler 1 2 15 delonexit $TMP_DIR/$PROGNAME.$$.log { [ "X$NOSPOOL" = X ] && spool_message process_queue } > $TMP_DIR/$PROGNAME.$$.log 2>&1 mailx -s "Mino Mail Server Log" alexis $FROM < $TMP_DIR/$PROGNAME.$$.log rm -f $TMP_DIR/$PROGNAME.$$.log dontdelonexit $TMP_DIR/$PROGNAME.$$.log exitdel } gen_lock_file_name() { echo $SPOOL_DIR/$1.lock } #shpp include utils.sh.shpp @ 1.1 log @Initial revision @ text @d32 1 a32 1 DATE=`sed -n "s/^Date:.*<\(.*\)>.*/\1/p" $TMP_DIR/$PROGNAME.$$.mbx | head -1` @