#!/bin/bash

if [ -z $SDDIR ]; then
    SDDIR=/etc/statusd
fi

if [ -z $SPOOLDIR ]; then
    SPOOLDIR=/var/spool/statusd
fi


STF=$SPOOLDIR/dnsbl.status

NS=127.0.0.1

IGNORE_IPS=""
IGNORE_BLS=""

bls_off="
dnsblchile.org
blackholes.scconsult.com
dunk.dnsbl.tuxad.de
hartkore.dnsbl.tuxad.de
bl.octopusdns.com
ix.dnsbl.manitu.net
"

bls="
0spam-n.fusionzero.com
0spam.fusionzero.com
88.blocklist.zap
access.redhawk.org
admin.bl.kundenserver.de
all.s5h.net
all.spam-rbl.fr
all.spamrats.com
auth.spamrats.com
b.barracudacentral.org
backscatter.spameatingmonkey.net
bad.virusfree.cz
bb.barracudacentral.org
bip.virusfree.cz
bl-h1.rbl.polspam.pl
bl-h2.rbl.polspam.pl
bl-h3.rbl.polspam.pl
bl-h4.rbl.polspam.pl
bl.0spam.org
bl.blocklist.de
bl.drmx.org
bl.konstant.no
bl.mailspike.net
bl.mav.com.br
bl.mipspace.com
bl.nordspam.com
bl.nosolicitado.org
bl.nszones.com
bl.octopusdns.com
bl.rbl.polspam.pl
bl.scientificspam.net
bl.score.senderscore.com
bl.spamcop.net
bl.spameatingmonkey.net
bl.suomispam.net
bl.tiopan.com
bl.worst.nosolicitado.org
blacklist.mail.ops.asp.att.net
blacklist.mailrelay.att.net
blacklist.sci.kun.nl
blacklist.sequoia.ops.asp.att.net
blacklist.woody.ch
block.ascams.com
bogons.cymru.com
cbl.abuseat.org
cidr.bl.mcafee.com
cnkr.rbl.polspam.pl
combined.rbl.msrbl.net
db.wpbl.info
dbl.0spam.org
dnsbl-0.uceprotect.net
dnsbl-1.uceprotect.net
dnsbl-2.uceprotect.net
dnsbl-3.uceprotect.net
dnsbl.ascams.com
dnsbl.beetjevreemd.nl
dnsbl.calivent.com.pe
dnsbl.cobion.com
dnsbl.cyberlogic.net
dnsbl.darklist.de
dnsbl.dronebl.org
dnsbl.forefront.microsoft.com
dnsbl.isx.fr
dnsbl.justspam.org
dnsbl.kempt.net
dnsbl.mcu.edu.tw
dnsbl.net.ua
dnsbl.rv-soft.info
dnsbl.rymsho.ru
dnsbl.threatint.zone
dnsbl.tornevall.org
dnsbl.zapbl.net
dnsbl1.dnsbl.borderware.com
dnsbl2.dnsbl.borderware.com
dnsbl3.dnsbl.borderware.com
dnsrbl.swinog.ch
dul.dnsbl.borderware.com
dyn.nszones.com
dyn.rbl.polspam.pl
dyna.spamrats.com
fnrbl.fast.net
forbidden.icm.edu.pl
free.v4bl.org
gl.suomispam.net
hil.habeas.com
images.rbl.msrbl.net
ip.v4bl.org
ip4.bl.zenrbl.pl
iprbl.mailcleaner.net
ips.backscatterer.org
korea.services.net
lblip4.rbl.polspam.pl
list.bbfh.org
mail-abuse.blacklist.jippg.org
nbl.0spam.org
netbl.spameatingmonkey.net
netblockbl.spamgrouper.to
netscan.rbl.blockedservers.com
niprbl.mailcleaner.net
noptr.spamrats.com
openproxy.bls.digibase.ca
orvedb.aupads.org
pbl.spamhaus.org
phishing.rbl.msrbl.net
pofon.foobar.hu
proxyabuse.bls.digibase.ca
psbl.surriel.com
q.mail-abuse.com
r.mail-abuse.com
rbl.0spam.org
rbl.abuse.ro
rbl.blakjak.net
rbl.blockedservers.com
rbl.choon.net
rbl.dns-servicios.com
rbl.efnet.org
rbl.efnetrbl.org
rbl.fasthosts.co.uk
rbl.interserver.net
rbl.iprange.net
rbl.ircbl.org
rbl.metunet.com
rbl.rbldns.ru
rbl.schulte.org
rbl.suresupport.com
rbl.tdk.net
rbl.zenon.net
rbl2.triumf.ca
rblip4.rbl.polspam.pl
relays.bl.kundenserver.de
relays.nether.net
rsbl.aupads.org
safe.dnsbl.prs.proofpoint.com
sbl-xbl.spamhaus.org
sbl.nszones.com
sbl.spamdown.org
sbl.spamhaus.org
schizo-bl.kundenserver.de
singular.ttk.pte.hu
spam.dnsbl.anonmails.de
spam.pedantic.org
spam.rbl.blockedservers.com
spam.rbl.msrbl.net
spam.spamrats.com
spamblock.kundenserver.de
spambot.bls.digibase.ca
spamguard.leadmon.net
spamlist.or.kr
spamrbl.imp.ch
spamsources.fabel.dk
st.technovision.dk
superblock.ascams.com
tor.efnet.org
torexit.dan.me.uk
truncate.gbudb.net
ubl.unsubscore.com
unsure.nether.net
v4.fullbogons.cymru.com
virus.rbl.msrbl.net
vote.drbl.caravan.ru
vote.drbl.gremlin.ru
web.rbl.msrbl.net
work.drbl.caravan.ru
work.drbl.gremlin.ru
wormrbl.imp.ch
worms-bl.kundenserver.de
xbl.spamhaus.org
z.mailspike.net
zen.spamhaus.org
"

if [ -f $SDDIR/config/blcheck.conf ]; then
	. $SDDIR/config/blcheck.conf
fi

####################################################

TMP=$SPOOLDIR/dnsblcache

function blcheck() {

	[ -d $TMP ] || mkdir $TMP

	#IPS=`ifconfig | grep 'inet addr:' | awk {'print $2'} |sed "s/^addr://" |grep -vE '^(192\.168\.|10\.|127\.)'`
	IPS=`ip address | grep 'inet ' | awk {'print $2'} |sed "s/\/[0-9]*\$//" |grep -vE '^(192\.168\.|10\.|127\.|172\.1[6-9]|172\.2|172\.3[0-1])'`

	for IGNIP in $IGNORE_IPS; do
		IPS=`echo "$IPS" | grep -v "$IGNIP"`
	done

	for IGNBL in $IGNORE_BLS; do
		bls=`echo "$bls" | grep -v "$IGNBL"`
	done

	list=''
	checked=0

	i=0

	find $TMP/ -mmin +30 -type f -delete
	find $TMP/ -size -1c -mmin +10 -type f -delete

	for IP in $IPS; do
		reverse=`echo "$IP" | sed -E "s/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/\4.\3.\2.\1/"`

		for bl in $bls; do
			BLR=$TMP/$IP.$bl.result
			if ! [ -f $BLR ]; then
				dig +short $reverse.$bl @$NS >>$TMP/$IP.$bl.result 2>&1 &
				((i++))
				checked=1
			fi
			if [ $i -eq 50 ]; then
				sleep 1
				i=0
			fi
		done
	done

	if [ $checked -eq 1 ]; then
		sleep 5
	fi

	for IP in $IPS; do
		if (grep '^127.0.0.' $TMP/$IP* >/dev/null); then
			list="$list $IP"
		fi
	done

	if [ "x$list" == "x" ]; then
	    echo "OK"
	else
	    echo "IP:$list"
	fi

}

if [ "$1" == "cron" ]; then
	RES=`blcheck`
	echo "$RES" >$STF
else
	if [ -f $STF ]; then
		RES=`cat $STF`
		echo "$RES"
		if [ "$RES" != "OK" ]; then
			exit 1
		else
			exit 0
		fi
	else
		echo "OK"
		exit 0
	fi
fi
