#!/bin/sh
# shell script to verify what sendmail would do with given addresses
# this version works for sendmail versions 4.40 and above

verbose=false
if [ $1 = "-v" ]
then
	verbose=true
	shift
fi

trap "/bin/rm /tmp/ver.$$; exit" 1 2 3 15

while [ $# -ge 1 ]
do
	echo -n "$1: "

	/usr/lib/sendmail -bt > /tmp/ver.$$  <<EOF
0 $1
EOF

	if grep -s 'ruleset  0 returns: "^V" "local"' /tmp/ver.$$
	then
	    if /usr/lib/sendmail -bv $1 > /tmp/ver.$$
	    then
		echo addr OK
	    else
		sed -n -e '/deliverable/d'	\
		       -e 's/\(.*\)\.\.\. \(.*\)/\2  (\1)/p' /tmp/ver.$$
	    fi
	    if $verbose
	    then
		aliases=""
		for a in `sed -n 's/\.\.\. deliverable//p' /tmp/ver.$$`
		do
		    if [ "$a" = "$1" ]
		    then
			echo "Routed to:  channel=local,  addr=$a"
		    else
			aliases="$aliases $a"
		    fi
		done
		if [ -n "$aliases" ]
		then
		    echo "Aliased to:$aliases"
		    $0 $aliases
		fi
	    fi
	elif grep -s 'ruleset  0 returns: "^V" "error"' /tmp/ver.$$
	then
	    sed -n -e 's/"\([^"]*\)"/\1/g'	\
		-e '/ruleset  0 returns:/s/.*^X //p' /tmp/ver.$$
	else
	    echo addr OK
	    if $verbose
	    then
		sed -n '/ruleset  3 returns:/s/.*returns: //p' /tmp/ver.$$ |
		sed -n -e '$s/"\([^"]*\)"/\1/g' \
		    -e '$s/ \([!.@%]\) /\1/g'	\
		    -e '$s/^/Normalised to: /p' 

		sed -n '/ruleset  0 returns:/s/.*^V" //p' /tmp/ver.$$ |
		sed -e 's/"\([^"]*\)"/\1/g'	\
		    -e 's/\(.*\) ^W \(.*\) ^X \(.*\)/Routed to:  channel=\1,  host=\2,  addr=\3/'\
		    -e 's/\(.*\) ^X \(.*\)/Routed to:  channel=\1,  addr=\2/'	\
		    -e 's/ \([!.@%]\) /\1/g'
	    fi
	fi

	/bin/rm /tmp/ver.$$
	shift
done
