Date: Sat, 16 Feb 2002 22:22:32 -0500 (EST) From: Mikhail Teterin <mi@corbulon.video-collage.com> To: FreeBSD-gnats-submit@freebsd.org Cc: brian@freebsd.org Subject: bin/35018: enhancing daily/460.status-mail-rejects Message-ID: <200202170322.g1H3MWRP078161@corbulon.video-collage.com>
next in thread | raw e-mail | index | archive | help
>Number: 35018 >Category: bin >Synopsis: enhancing daily/460.status-mail-rejects >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sat Feb 16 19:30:00 PST 2002 >Closed-Date: >Last-Modified: >Originator: Mikhail Teterin >Release: FreeBSD 4.5-STABLE i386 >Organization: Virtual Estates, Inc. >Environment: System: FreeBSD corbulon.video-collage.com 4.5-STABLE FreeBSD 4.5-STABLE #1: Mon Feb 11 02:22:13 EST 2002 mi@corbulon.video-collage.com:/home/src/sys/compile/Corbulon i386 >Description: My primary trouble with the current version, is that it relies on the arg1 element of the logged string to contain the culprit. That is often a wrong assumption -- depending on the ruleset, arg1 may contain the local address, for example. The attached patch makes use of the relay= element of the string, processing its entire content -- not just the IP address. The patch also: . obviates the need for daily_status_mail_rejects_logs by using find(1) to find the maillog-s modified within the last two days . allows one to keep maillog-s bzip2-ed . removes one invocation of sort(1) and one of uniq(1) -- both, perl and awk are quite capable of counting and hashing . removes one invocation of date -- both awk and perl are capable of figuring out the todays date . stops the input processing as soon as the timestamp on the next line starts indicating today -- to save time . replaces perl with awk, because I don't know perl that well >How-To-Repeat: Here is the typical output of the current version. Note, that ALDAN.ALGEBRA.COM and virtual-estates.net are local machines here and are listed because certain addresses at them are blocked. Checking for rejected mail hosts: 7 ALDAN.ALGEBRA.COM 4 virtual-estates.net 4 [200.35.80.90] 3 [207.252.175.120] 2 imail.com 2 [61.144.185.23] 1 tig249-rsby.isp.net.au 1 spiderman.webworld1.net 1 host-148-244-121-173.block.alestra.net.mx 1 [216.105.175.129] 1 [208.60.110.2] 1 [200.74.132.158] 1 61-222-234-50.HINET-IP.hinet.net Here are the same logs processed by the new version: Checking for rejected mail hosts: 4 [200.35.80.90] 3 [207.252.175.120] 2 auction.jackpot.com [64.70.22.158] (may be forged) 2 [64.86.133.90] 2 [61.144.185.23] 1 tig249-rsby.isp.net.au [203.202.67.250] 1 qm-2.dlbdirect.com [64.152.73.103] 1 opt.edirectnetwork.net [66.115.47.116] (may be forged) 1 mailer5.hispeedoffers.com [64.32.63.39] 1 mail8.transcentives.net [216.23.198.158] 1 mail.bigfoot.com [64.15.239.140] 1 laoutbound3.jackpot.com [64.70.22.156] 1 host-148-244-121-173.block.alestra.net.mx [148.244.121.173] 1 cc7.optinmail.cc [64.38.239.36] 1 cc43.optinmail.cc [64.38.239.149] 1 cc42.optinmail.cc [64.38.239.148] 1 cc13.optinmail.cc [64.38.239.77] 1 [216.105.175.129] 1 [211.20.3.171] 1 [208.60.110.2] 1 [203.247.158.7] 1 [200.74.132.158] 1 61-222-234-50.HINET-IP.hinet.net [61.222.234.50] >Fix: --- 460.status-mail-rejects Tue Oct 31 18:47:27 2000 +++ 460.status-mail-rejects Sat Feb 16 22:05:02 2002 @@ -33,23 +33,32 @@ echo Checking for rejected mail hosts: - start=`date -v-1d '+%b %d' | sed 's/0\(.\)$/ \1/'` - n=$(($daily_status_mail_rejects_logs - 2)) rc=$({ - while [ $n -ge 0 ] + for f in `find /var/log -name maillog\* \ + \( -mtime 1 -o -mtime 2 \) | xargs ls -tr` do - if [ -f /var/log/maillog.$n ] - then - cat /var/log/maillog.$n - elif [ -f /var/log/maillog.$n.gz ] - then - zcat -fc /var/log/maillog.$n.gz - fi - n=$(($n - 1)) + case $f in + *.gz) zcat -fc $f;; + *.bz2) bzip2 -cd $f;; + *) cat $f;; + esac done - cat /var/log/maillog - } | - perl -ne "print \"\$2\n\" - if (/reject=/ and /^$start.*ruleset=check_\S+,\s+arg1=(<[^@]+@)?([^>,]+).*reject=/o);" | - sort -f | uniq -ic | sort -fnr | tee /dev/stderr | wc -l) + } | awk ' + BEGIN { + today=systime(); + yesterday=strftime("%b %d", today-86400); + today=strftime("%b %d", today); + } + { + relay=gensub("^" yesterday ".*, relay=([^,]+), reject=.*", + "\\1", 1); + if (relay != $0) + rejects[relay]++; + else if (match($0, "^" today)) + exit; + } + END { + for (relay in rejects) + printf("%4d %s\n", rejects[relay], relay); + }' | sort -fnr | tee /dev/stderr | wc -l) [ $rc -gt 0 ] && rc=1 fi;; >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200202170322.g1H3MWRP078161>