xref: /freebsd/usr.sbin/periodic/etc/daily/460.status-mail-rejects (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
181ea85a8SBrad Davis#!/bin/sh
281ea85a8SBrad Davis#
381ea85a8SBrad Davis#
481ea85a8SBrad Davis
581ea85a8SBrad Davis# If there is a global system configuration file, suck it in.
681ea85a8SBrad Davis#
781ea85a8SBrad Davisif [ -r /etc/defaults/periodic.conf ]
881ea85a8SBrad Davisthen
981ea85a8SBrad Davis    . /etc/defaults/periodic.conf
1081ea85a8SBrad Davis    source_periodic_confs
1181ea85a8SBrad Davisfi
1281ea85a8SBrad Davis
1381ea85a8SBrad Daviscase "$daily_status_mail_rejects_shorten" in
1481ea85a8SBrad Davis[Yy][Ee][Ss])	shorten='cut -d" " -f2,3';;
1581ea85a8SBrad Davis*)		shorten=cat;;
1681ea85a8SBrad Davisesac
1781ea85a8SBrad Davis
1881ea85a8SBrad Daviscase "$daily_status_mail_rejects_enable" in
1981ea85a8SBrad Davis    [Yy][Ee][Ss])
2081ea85a8SBrad Davis	if [ ! -d /etc/mail ]
2181ea85a8SBrad Davis	then
2281ea85a8SBrad Davis	    echo '$daily_status_mail_rejects_enable is set but /etc/mail' \
2381ea85a8SBrad Davis		"doesn't exist"
2481ea85a8SBrad Davis	    rc=2
2581ea85a8SBrad Davis	elif [ ! -f /var/log/maillog ]
2681ea85a8SBrad Davis	then
2781ea85a8SBrad Davis	    echo '$daily_status_mail_rejects_enable is set but ' \
2881ea85a8SBrad Davis		"/var/log/maillog doesn't exist"
2981ea85a8SBrad Davis	    rc=2
3081ea85a8SBrad Davis	elif [ "$daily_status_mail_rejects_logs" -le 0 ]
3181ea85a8SBrad Davis	then
3281ea85a8SBrad Davis	    echo '$daily_status_mail_rejects_enable is set but ' \
3381ea85a8SBrad Davis		'$daily_status_mail_rejects_logs is not greater than zero'
3481ea85a8SBrad Davis	    rc=2
3581ea85a8SBrad Davis	else
3681ea85a8SBrad Davis	    echo
3781ea85a8SBrad Davis	    echo Checking for rejected mail hosts:
3881ea85a8SBrad Davis
3981ea85a8SBrad Davis	    yesterday=$(date -v-1d '+%b %e')
4081ea85a8SBrad Davis	    today=$(date '+%b %e')
4181ea85a8SBrad Davis	    n=$(($daily_status_mail_rejects_logs - 2))
4281ea85a8SBrad Davis	    rc=$({
4381ea85a8SBrad Davis		while [ $n -ge 0 ]
4481ea85a8SBrad Davis		do
4581ea85a8SBrad Davis		    if [ -f /var/log/maillog.$n ]
4681ea85a8SBrad Davis		    then
4781ea85a8SBrad Davis			cat /var/log/maillog.$n
4881ea85a8SBrad Davis		    elif [ -f /var/log/maillog.$n.gz ]
4981ea85a8SBrad Davis		    then
5081ea85a8SBrad Davis			zcat -fc /var/log/maillog.$n.gz
5181ea85a8SBrad Davis		    elif [ -f /var/log/maillog.$n.bz2 ]
5281ea85a8SBrad Davis		    then
5381ea85a8SBrad Davis			bzcat -fc /var/log/maillog.$n.bz2
54*774bb1c2SCeri Davies		    elif [ -f /var/log/maillog.$n.xz ]
55*774bb1c2SCeri Davies		    then
56*774bb1c2SCeri Davies			xzcat -f /var/log/maillog.$n.xz
57*774bb1c2SCeri Davies		    elif [ -f /var/log/maillog.$n.zst ]
58*774bb1c2SCeri Davies		    then
59*774bb1c2SCeri Davies			zstdcat -fc /var/log/maillog.$n.zst
6081ea85a8SBrad Davis		    fi
6181ea85a8SBrad Davis		    n=$(($n - 1))
6281ea85a8SBrad Davis		done
6381ea85a8SBrad Davis		cat /var/log/maillog
6481ea85a8SBrad Davis	    } | sed -Ene "/^$today/q" -e "/^$yesterday/{"'
6581ea85a8SBrad Davis		    s/.*ruleset=check_relay,.* relay=([^,]+), reject=([^ ]*).*/\2 check_relay \1/p
6681ea85a8SBrad Davis		    t end
6781ea85a8SBrad Davis                    s/.*ruleset=check_rcpt,.* arg1=<?([^>,]+).* reject=([^ ]+) .* ([^ ]+)/\2 check_rcpt \1 \3/p
6881ea85a8SBrad Davis		    t end
6981ea85a8SBrad Davis                    s/.*ruleset=check_([^,]+),.* arg1=<?([^@]+@)?([^>,]+).* reject=([^ ]+) .* ([^ ]+)/\4 check_\1 \3 \5/p
7081ea85a8SBrad Davis		    :end
7181ea85a8SBrad Davis		}' | eval $shorten | sort -f | uniq -ic | sort -fnr | tee /dev/stderr | wc -l)
7281ea85a8SBrad Davis	    [ $rc -gt 0 ] && rc=1
7381ea85a8SBrad Davis	fi;;
7481ea85a8SBrad Davis
7581ea85a8SBrad Davis    *)  rc=0;;
7681ea85a8SBrad Davisesac
7781ea85a8SBrad Davis
7881ea85a8SBrad Davisexit $rc
79