* Mike Erdely <[EMAIL PROTECTED]> [061127 11:12]:
> Jim Razmus wrote:
> >I sent Bob a patch to fix some off by ones. You want those patches or
> >you may inadvertently trap a host who has valid DNS records.
>
> Care to share the patch?
>
> >Jim
>
> -ME
>
Here you go.
Jim
Index: greyscanner
===================================================================
RCS file: /var/cvsroot/soekris/root/greyscanner,v
retrieving revision 1.3
retrieving revision 1.1
diff -u -r1.3 -r1.1
--- greyscanner 22 Nov 2006 20:24:33 -0000 1.3
+++ greyscanner 12 Nov 2006 19:44:50 -0000 1.1
@@ -1,5 +1,5 @@
#!/usr/bin/perl
-# $Id: greyscanner,v 1.3 2006/11/22 20:24:33 jtr2 Exp $
+# $Id: greyscanner,v 1.1 2006/11/12 19:44:50 jtr2 Exp $
# Greytrapping daemon for OpenBSD spamd
# Copyright (c) 2006 Bob Beck <[EMAIL PROTECTED]>. All rights reserved.
@@ -177,18 +177,17 @@
}
}
}
- close (SPAMDB);
- my $wi = keys %WHITE;
- my $tr = keys %TRAPPED;
- my $gr = keys %GREY;
+ my @wi = (keys %WHITE);
+ my @tr = (keys %TRAPPED);
+ my @gr = (keys %GREY);
syslog ('debug',
- "scanned $wi whitelisted, $tr trapped, $gr unique greys\n");
+ "scanned $#wi whitelisted, $#tr trapped, $#gr unique greys\n");
foreach $grey (keys %GREY) {
my $trapped = 0;
# ignore if it's already done
- next if ($TRAPPED{$grey} || $WHITE{$grey});
+ next if ($WHITE{$grey} || $TRAPPED{$grey});
# check the senders. if any are malformed, give the host the boot.
my @senders = split("\t", $FROM{$grey});
@@ -201,7 +200,8 @@
}
next if $trapped;
- my $count = @senders;
+ my $count = $#senders;
+ $count++;
my @rcpts = split("\t", $RCPT{$grey});
# if the host has queued up more than our suspect threshold, look
# at a few things...
@@ -220,9 +220,12 @@
$s =~ s/[EMAIL PROTECTED]@//;
$D{"$s"}++;
}
- my $rcount = keys %R;
- my $scount = keys %S;
- my $dcount = keys %D;
+ my @urcpts = keys %R;
+ my @usenders = keys %S;
+ my @udoms = keys %D;
+ my $rcount = $#urcpts;
+ my $scount = $#usenders;
+ my $dcount = $#udoms;
if ($dcount > $MAX_DOMAINS) {
$reason = "Host sending from " . $dcount .
@@ -303,7 +306,7 @@
my $res = Net::DNS::Resolver->new;
my @domains = (keys %SENDERS);
- while (scalar @domains > 0) {
+ while ($#domains > 0) {
my @active = $sel->handles;
while ($#active < $DNS_SOCK_MAX - 1) {
# queue up a query for this domain.