On 14 Apr 2017, at 16:54, Rick wrote:

Everything having to do with DNS has gone terribly wrong since the update. Spamd cannot do anything at all with DNS even though it's a local caching NS and EVERTHING else is resolving just fine. It does pull the name server entry correctly but it resolves nothng. If I force it use DNS all queries fail. I am at the end of my rope as this issue makes no sense in any way shape or fashion. I am including the debug output from spamd --debug -D dns (BTW: I tried 8.8.8.8 and 8.8.4.4 in resolv.conf too. Always detects NS out
of resolv.conf fine)

This is a known problem fixed in both the 3.4 and trunk branches in Subversion. The root cause is compound flux in how Net::DNS behaved between v0.83 and v1.03, breaking SA's use of DNS in multiple places. To cover ALL of the Net::DNS problems, you can apply the patches from bugs 7223, 7231, and 7265. Your specific case looks like it is only the issue addressed in 7223. Links:

https://bz.apache.org/SpamAssassin/show_bug.cgi?id=7223
https://bz.apache.org/SpamAssassin/show_bug.cgi?id=7231
https://bz.apache.org/SpamAssassin/show_bug.cgi?id=7265

We're in the end stages of prepping a 3.4.2 release "soonish" so a checkout from the 3.4 branch should be very close to what gets released as 3.4.2. If you are willing to run from a svn checkout for a while, that will get those 3 fixes as well as others.

Here's how I diagnosed the problem:

spamd --debug -D dns
[ abridged...]
Apr 14 16:46:04.987 [17374] dbg: dns: is Net::DNS::Resolver available? yes
Apr 14 16:46:04.987 [17374] dbg: dns: Net::DNS version: 1.09

Net::DNS is >1.03, so it has all of the "fixes" to its API that caused SA problems.

Apr 14 16:46:04.987 [17374] dbg: dns: looking up NS records for user
specified domains: gmail.com, yahoo.com, foxnews.com
Apr 14 16:46:04.993 [17374] dbg: dns: attempt 1/1, trying connect/sendto to
[127.0.0.1]:53
Apr 14 16:46:04.993 [17374] dbg: dns: connect_sock, resolver: yes
Apr 14 16:46:04.998 [17374] dbg: dns: 53959 configured local ports for DNS
queries
Apr 14 16:46:04.998 [17374] dbg: dns: LocalAddr: [0.0.0.0]:58033, name
server: [127.0.0.1]:53, module IO::Socket::IP
Apr 14 16:46:04.999 [17374] dbg: dns: resolver socket rx buffer size is
124928 bytes, local port 58033
Apr 14 16:46:05.000 [17374] dbg: dns: providing a callback for id:
44235/IN/NS/yahoo.com

Completely normal DNS asynchronous query setup, query id is 44235

Apr 14 16:46:05.002 [17374] dbg: dns: dns reply 44235 is OK, 0 answer
records

Completely normal DNS reply ("OK") for query id 44235 but with 0 answer records. This is what you get when you ask a nameserver for something that it is not authoritative for and does not have cached without the "recursion desired" query flag. This is the change which caused bug 7223: Net::DNS used to always set RD by default, until it stopped doing so in 1.01. The patch for this is actually so trivial I'll include it here:


--- lib/Mail/SpamAssassin/DnsResolver.pm.orig 2015/07/20 18:23:18 1691991
+++ lib/Mail/SpamAssassin/DnsResolver.pm        2015/07/20 18:24:48     1691992
@@ -592,6 +592,9 @@
   };

   if ($packet) {
+    # RD flag needs to be set explicitly since Net::DNS 1.01, Bug 7223 
+    $packet->header->rd(1);
+
   # my $udp_payload_size = $self->{res}->udppacketsize;
     my $udp_payload_size = $self->{conf}->{dns_options}->{edns};
     if ($udp_payload_size && $udp_payload_size > 512) {

Reply via email to