#!/usr/bin/perl
use strict;
use warnings;
use Net::DNS;

our $VERSION="0.001000";
our $ID='$Id: rbl,v 1.1 2003/08/10 10:13:51 nemesis Exp $';

if (scalar(@ARGV)!=3) {
	die "Usage: $0 DNS_ADDR RBL_DOMAIN IP_TO_CHECK\n";
}

my ($server,$domain,$ip)=@ARGV;

my $res;
if (!defined($res=Net::DNS::Resolver->new(
			nameservers => [$server],
			recurse => 1,
			#debug => 1,
			retry => 1,
			tcp_timeout => 10,
			udp_timeout => 10,
			
		))) {
	die "Cannot create my rbl resolver";
}


my $name=join(".",reverse(split(/\./,$ip))).".".$domain;

my $query = $res->send($name,'A');

# Did we get an answer?
if (defined($query)) {
	my @addr = grep { $_->type eq 'A' } $query->answer;
	my $addr=$addr[0] ? $addr[0]->address : undef;

	# Is there a addr for this host?
	if (defined($addr) && $addr eq "127.0.0.2") {
		#warn "$ip: SPAMMER\n";
		exit(0); # matches rbl!
	}
	else {
		#warn "$ip: Clean?\n";
		exit(1); # does not match rbl
	}
}
else {
	my $reason = $res->errorstring;

	if ($reason eq "NXDOMAIN") {
		#warn "$ip: Clean\n";
	}
	else {
		#warn "$ip: server failed: $reason\n";
	}
	exit(1); # does not match rbl
}
