#!/bin/bash

sendmail_log="/var/log/mail.log"

function cleanup()
{
	if [[ "$TMPFILE" != "" ]]; then rm -f $TMPFILE; fi
	if [[ "$TMPFILE1" != "" ]]; then rm -f $TMPFILE1; fi
	if [[ "$TMPFILE2" != "" ]]; then rm -f $TMPFILE2; fi
	if [[ "$TMPFILE3" != "" ]]; then rm -f $TMPFILE3; fi
	exit $1
}

function cleanup_trap()
{
	cleanup 1
}

function usage()
{
	echo "usage: $0 -r <recipient@address> -s <sender@address> "
	exit 1
}
#good ones:
#
trap cleanup_trap SIGKILL SIGHUP SIGTRAP SIGINT SIGABRT SIGUSR1 SIGURG SIGTERM SIGILL  SIGQUIT SIGUSR2 SIGWINCH SIGSEGV

if [[ "$#" < "2" ]]; then usage; fi

while getopts "l:r:s:?h" opt; do
	case "$opt" in
	r) rcpt_addr=`echo \'$OPTARG\' |  tr -c -d "[[:alnum:]@.\-\_]"`;;
	s) send_addr=`echo \'$OPTARG\' |  tr -c -d "[[:alnum:]@.\-\_]"`;;
	l) sendmail_log=$OPTARG;;
	*) usage;;
	esac;
done

if [[ "$rcpt_addr" == "" ]]; then
	usage
fi


if ! [[ -f $sendmail_log ]]; then
	echo "$0: $sendmail_log is not a file" 
	exit 1
fi


PROGNAME=`basename $0`
TMPFILE=`mktemp -q /tmp/$PROGNAME.XXXXXXXXX`
if [ $? -ne 0 ]; then
	echo "$0: Can't create temp file, exiting..."
	cleanup 1
fi

TMPFILE1=`mktemp -q /tmp/$PROGNAME.XXXXXXXXX`
if [ $? -ne 0 ]; then
	echo "$0: Can't create temp file, exiting..."
	cleanup 1
fi


TMPFILE2=`mktemp -q /tmp/$PROGNAME.XXXXXXXXX`
if [ $? -ne 0 ]; then
	echo "$0: Can't create temp file, exiting..."
	cleanup 1
fi

TMPFILE3=`mktemp -q /tmp/$PROGNAME.XXXXXXXXX`
if [ $? -ne 0 ]; then
	echo "$0: Can't create temp file, exiting..."
	cleanup 1
fi

echo "$sendmail_log" | grep -qi ".gz$" 

if [[ "$?" == "0" ]]; then
	cat $sendmail_log | zcat > $TMPFILE3

	if [[ "$?" == "0" ]] ; then
		sendmail_log=$TMPFILE3
	else
		echo "$0: Error proccessing $sendmail_log"
		cleanup 1
	fi
fi


if [[ "${rcpt_addr}" != "" ]]; then
	grep -i "sm-mta.*to=<${rcpt_addr}.*stat=spamas" $sendmail_log | cut -d ':' -f 4 | cut -d ':' -f1 | sort -u > $TMPFILE
fi

if [[ "${rcpt_addr}" != "" ]]; then 
	grep -i "sm-mta.*reject=.*<.*$rcpt_addr.*>" $sendmail_log |  cut -d ':' -f 4 |  cut -d ':' -f1 | grep -v ruleset |  sort -u >> $TMPFILE
fi

if [[ "${send_addr}" != "" ]]; then

	LINE=0
	while (true); do
		((LINE++))
		tempvar=`cat $TMPFILE | printline $LINE`

		if (( $? > 0 )); then
			break;
		fi
		grep -qi "${tempvar}: from=<.*${send_addr}.*>" $sendmail_log 2>&1 >/dev/null && echo ${tempvar} >> $TMPFILE1

	done

	cp $TMPFILE1 $TMPFILE || exit 1
fi


LINE=0
COUNTER=0
while (true); do
	((LINE++))
	tempvar=`cat $TMPFILE | printline $LINE`

	if (( $? > 0 )); then
		break;
	fi
	grep -i "${tempvar}:" $sendmail_log >> $TMPFILE2 &&\
	echo "======================================" >> $TMPFILE2 && ((COUNTER++))

done


cat $TMPFILE2
echo "${COUNTER} messages/connections rejected"

cleanup 0

