You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by mm...@apache.org on 2013/01/12 03:28:14 UTC
svn commit: r1432359 - in /spamassassin/trunk/lib/Mail/SpamAssassin: Dns.pm
DnsResolver.pm Plugin/ASN.pm Plugin/AskDNS.pm Plugin/URIDNSBL.pm
Author: mmartinec
Date: Sat Jan 12 02:28:13 2013
New Revision: 1432359
URL: http://svn.apache.org/viewvc?rev=1432359&view=rev
Log:
DnsResolver: prevent a failed or suppressed DNS query packet generation from propagating unnecessarily
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm
spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ASN.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AskDNS.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm?rev=1432359&r1=1432358&r2=1432359&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm Sat Jan 12 02:28:13 2013
@@ -106,7 +106,6 @@ sub do_rbl_lookup {
# only make a specific query once
if (!$existing) {
- dbg("dns: launching DNS $type query for $host in background");
my $ent = {
key => $key,
@@ -123,23 +122,29 @@ sub do_rbl_lookup {
$self->{async}->report_id_complete($id,$key,$timestamp);
});
- $ent->{id} = $id; # tie up the loose end
- $existing =
- $self->{async}->start_lookup($ent, $self->{master_deadline});
+ if (!defined $id) {
+ dbg("dns: SKIPPED launching of DNS $type query for $host");
+ } else {
+ dbg("dns: launched DNS $type query for $host in background");
+ $ent->{id} = $id; # tie up the loose end
+ $existing =
+ $self->{async}->start_lookup($ent, $self->{master_deadline});
+ }
}
- # always add set
- push @{$existing->{sets}}, $set;
+ if ($existing) {
+ # always add set
+ push @{$existing->{sets}}, $set;
- # sometimes match or always match
- if (defined $subtest) {
- $self->{dnspost}->{$set}->{$subtest} = $rule;
- }
- else {
- push @{$existing->{rules}}, $rule;
- }
+ # sometimes match or always match
+ if (defined $subtest) {
+ $self->{dnspost}->{$set}->{$subtest} = $rule;
+ } else {
+ push @{$existing->{rules}}, $rule;
+ }
- $self->{rule_to_rblkey}->{$rule} = $key;
+ $self->{rule_to_rblkey}->{$rule} = $key;
+ }
}
# TODO: these are constant so they should only be added once at startup
@@ -156,8 +161,6 @@ sub do_dns_lookup {
# only make a specific query once
return if $self->{async}->get_lookup($key);
- dbg("dns: launching DNS $type query for $host in background");
-
my $ent = {
key => $key,
zone => $host, # serves to fetch other per-zone settings
@@ -172,8 +175,13 @@ sub do_dns_lookup {
$self->{async}->report_id_complete($id,$key,$timestamp);
});
- $ent->{id} = $id; # tie up the loose end
- $self->{async}->start_lookup($ent, $self->{master_deadline});
+ if (!defined $id) {
+ dbg("dns: SKIPPED launching of DNS $type query for $host");
+ } else {
+ dbg("dns: launched DNS $type query for $host in background");
+ $ent->{id} = $id; # tie up the loose end
+ $self->{async}->start_lookup($ent, $self->{master_deadline});
+ }
}
###########################################################################
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm?rev=1432359&r1=1432358&r2=1432359&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm Sat Jan 12 02:28:13 2013
@@ -804,11 +804,13 @@ sub send {
$timeout = 1 if ($timeout < 1);
# note nifty use of a closure here. I love closures ;)
- $self->bgsend($name, $type, $class, sub {
+ my $id = $self->bgsend($name, $type, $class, sub {
my ($reply, $reply_id, $timestamp) = @_;
$answerpkt = $reply; $answerpkt_avail = 1;
});
+ last if !defined $id; # perhaps a restricted zone or a serious failure
+
my $now = time;
my $deadline = $now + $timeout;
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ASN.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ASN.pm?rev=1432359&r1=1432358&r2=1432359&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ASN.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ASN.pm Sat Jan 12 02:28:13 2013
@@ -299,15 +299,19 @@ sub parsed_metadata {
$pms->{async}->set_response_packet($id, $pkt, $key, $timestamp);
$self->process_dns_result($pms, $pkt, $zone_index);
});
- my $ent = {
- key=>$key, id=>$id, type=>'TXT',
- zone => $zone, # serves to fetch other per-zone settings
- };
- $pms->{async}->start_lookup($ent, $pms->{master_deadline});
- dbg("asn: launched DNS TXT query for %s.%s in background",
- $reversed_ip, $entry->{zone});
-
- $index++;
+ if (!defined $id) {
+ dbg("asn: SKIPPED launching of DNS TXT query for %s.%s",
+ $reversed_ip, $entry->{zone});
+ } else {
+ my $ent = {
+ key=>$key, id=>$id, type=>'TXT',
+ zone => $zone, # serves to fetch other per-zone settings
+ };
+ $pms->{async}->start_lookup($ent, $pms->{master_deadline});
+ dbg("asn: launched DNS TXT query for %s.%s in background",
+ $reversed_ip, $entry->{zone});
+ $index++;
+ }
}
}
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AskDNS.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AskDNS.pm?rev=1432359&r1=1432358&r2=1432359&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AskDNS.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AskDNS.pm Sat Jan 12 02:28:13 2013
@@ -644,6 +644,7 @@ sub askdns_hit {
sub start_lookup {
my($self, $pms, $query_type, $query_domain, $id, $dnskey) = @_;
+ return if !defined $id;
my $ent = {
key => $dnskey,
domain => $query_domain, # used for logging and reporting
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm?rev=1432359&r1=1432358&r2=1432359&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm Sat Jan 12 02:28:13 2013
@@ -913,7 +913,7 @@ sub lookup_domain_ns {
my $ent = $self->start_lookup($scanner, $dom, 'NS',
$self->res_bgsend($scanner, $dom, 'NS', $key),
$key);
- $ent->{obj} = $obj;
+ $ent->{obj} = $obj if $ent;
}
sub complete_ns_lookup {
@@ -989,7 +989,7 @@ sub lookup_a_record {
my $ent = $self->start_lookup($scanner, $hname, 'A',
$self->res_bgsend($scanner, $hname, 'A', $key),
$key);
- $ent->{obj} = $obj;
+ $ent->{obj} = $obj if $ent;
}
sub complete_a_lookup {
@@ -1054,9 +1054,11 @@ sub lookup_single_dnsbl {
my $ent = $self->start_lookup($scanner, $item, 'DNSBL',
$self->res_bgsend($scanner, $item, $qtype, $key),
$key);
- $ent->{obj} = $obj;
- $ent->{rulename} = $rulename;
- $ent->{zone} = $dnsbl;
+ if ($ent) {
+ $ent->{obj} = $obj;
+ $ent->{rulename} = $rulename;
+ $ent->{zone} = $dnsbl;
+ }
}
sub complete_dnsbl_lookup {
@@ -1178,6 +1180,7 @@ sub got_dnsbl_hit {
sub start_lookup {
my ($self, $scanner, $zone, $type, $id, $key) = @_;
+ return if !defined $id;
my $ent = {
key => $key,
zone => $zone, # serves to fetch other per-zone settings