Net::DNS 1.03. The FreeBSD p5-Net-DNS port has been downgraded to 1.02 but Net::DNS will be re-issued at some point soon. The changes in these patches seem to work well with Net::DNS 1.02. While here, add some TEST_DEPENDS so I can run the plugin-based tests as well. Bump PORTREVISION for spamassassin and japanese/spamassassin. PR: 204682 Submitted by: Mark.Martinec@ijs.si Obtained from: https://bz.apache.org/SpamAssassin/show_bug.cgi?id=7265
83 lines
3.2 KiB
Text
83 lines
3.2 KiB
Text
--- lib/Mail/SpamAssassin/DnsResolver.pm (revision 1715195)
|
|
+++ lib/Mail/SpamAssassin/DnsResolver.pm (working copy)
|
|
@@ -725,6 +725,37 @@
|
|
|
|
###########################################################################
|
|
|
|
+=item $id = $res->bgread()
|
|
+
|
|
+Similar to C<Net::DNS::Resolver::bgread>. Reads a DNS packet from
|
|
+a supplied socket, decodes it, and returns a Net::DNS::Packet object
|
|
+if successful. Dies on error.
|
|
+
|
|
+=cut
|
|
+
|
|
+sub bgread() {
|
|
+ my ($self) = @_;
|
|
+ my $sock = $self->{sock};
|
|
+ my $packetsize = $self->{res}->udppacketsize;
|
|
+ $packetsize = 512 if $packetsize < 512; # just in case
|
|
+ my $data = '';
|
|
+ my $peeraddr = $sock->recv($data, $packetsize+256); # with some size margin for troubleshooting
|
|
+ defined $peeraddr or die "bgread: recv() failed: $!";
|
|
+ my $peerhost = $sock->peerhost;
|
|
+ $data ne '' or die "bgread: received empty packet from $peerhost";
|
|
+ dbg("dns: bgread: received %d bytes from %s", length($data), $peerhost);
|
|
+ my($answerpkt, $decoded_length) = Net::DNS::Packet->new(\$data);
|
|
+ $answerpkt or die "bgread: decoding DNS packet failed: $@";
|
|
+ $answerpkt->answerfrom($peerhost);
|
|
+ if ($decoded_length ne length($data)) {
|
|
+ warn sprintf("bgread: received a %d bytes packet from %s, decoded %d bytes\n",
|
|
+ length($data), $peerhost, $decoded_length);
|
|
+ }
|
|
+ return $answerpkt;
|
|
+}
|
|
+
|
|
+###########################################################################
|
|
+
|
|
=item $nfound = $res->poll_responses()
|
|
|
|
See if there are any C<bgsend> reply packets ready, and return
|
|
@@ -772,13 +803,25 @@
|
|
$timeout = 0; # next time around collect whatever is available, then exit
|
|
last if $nfound == 0;
|
|
|
|
- my $packet = $self->{res}->bgread($self->{sock});
|
|
+ my $packet;
|
|
+ eval {
|
|
+ $packet = $self->bgread();
|
|
+ } or do {
|
|
+ undef $packet;
|
|
+ my $eval_stat = $@ ne '' ? $@ : "errno=$!"; chomp $eval_stat;
|
|
+ # resignal if alarm went off
|
|
+ die $eval_stat if $eval_stat =~ /__alarm__ignore__\(.*\)/s;
|
|
+ info("dns: bad dns reply: %s", $eval_stat);
|
|
+ };
|
|
|
|
+# Bug 7265, use our own bgread()
|
|
+# my $packet = $self->{res}->bgread($self->{sock});
|
|
+
|
|
if (!$packet) {
|
|
- my $dns_err = $self->{res}->errorstring;
|
|
- # resignal if alarm went off
|
|
- die "dns (3) $dns_err\n" if $dns_err =~ /__alarm__ignore__\(.*\)/s;
|
|
- info("dns: bad dns reply: $dns_err");
|
|
+ # error already reported above
|
|
+# my $dns_err = $self->{res}->errorstring;
|
|
+# die "dns (3) $dns_err\n" if $dns_err =~ /__alarm__ignore__\(.*\)/s;
|
|
+# info("dns: bad dns reply: $dns_err");
|
|
} else {
|
|
my $header = $packet->header;
|
|
if (!$header) {
|
|
--- lib/Mail/SpamAssassin/Plugin/DKIM.pm (revision 1715196)
|
|
+++ lib/Mail/SpamAssassin/Plugin/DKIM.pm (working copy)
|
|
@@ -794,7 +794,8 @@
|
|
# Only do so if EDNS0 provides a reasonably-sized UDP payload size,
|
|
# as our interface does not provide a DNS fallback to TCP, unlike
|
|
# the Net::DNS::Resolver::send which does provide it.
|
|
- my $res = $self->{main}->{resolver}->get_resolver;
|
|
+ my $res = $self->{main}->{resolver};
|
|
+ dbg("dkim: providing our own resolver: %s", ref $res);
|
|
Mail::DKIM::DNS::resolver($res);
|
|
}
|
|
}
|