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 2012/11/08 19:07:22 UTC

svn commit: r1407194 - /spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm

Author: mmartinec
Date: Thu Nov  8 18:07:22 2012
New Revision: 1407194

URL: http://svn.apache.org/viewvc?rev=1407194&view=rev
Log:
Bug 6862: Allow a DNS resolver to use EDNS (let it apply to queries prepared by our DnsResolver.pm too)

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm?rev=1407194&r1=1407193&r2=1407194&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm Thu Nov  8 18:07:22 2012
@@ -146,7 +146,7 @@ sub load_resolver {
       my $edns = $self->{conf}->{dns_options}->{edns};
       if ($edns && $edns > 512) {
         $res->udppacketsize($edns);
-        dbg("dns: EDNS, UDP message size %d", $edns);
+        dbg("dns: EDNS, UDP payload size %d", $edns);
       }
 
       # set $res->nameservers for the benefit of plugins which don't use
@@ -515,6 +515,8 @@ sub dnsext_dns0x20 {
   return $result;
 }
 
+# this subroutine mimics the Net::DNS::Resolver::Base::make_query_packet()
+#
 sub new_dns_packet {
   my ($self, $host, $type, $class) = @_;
 
@@ -559,6 +561,17 @@ sub new_dns_packet {
                  $host, $type, $class, $eval_stat);
   };
 
+  if ($packet) {
+  # my $udp_payload_size = $self->{res}->udppacketsize;
+    my $udp_payload_size = $self->{conf}->{dns_options}->{edns};
+    if ($udp_payload_size && $udp_payload_size > 512) {
+    # dbg("dns: adding EDNS ext, UDP payload size %d", $udp_payload_size);
+      my $optrr = Net::DNS::RR->new(Type => 'OPT', Name => '', TTL => 0,
+                                    Class => $udp_payload_size);
+      $packet->push('additional', $optrr);
+    }
+  }
+
   return $packet;
 }