]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
rec: treat the .localhost domain as special 9996/head
authorPieter Lexis <pieter.lexis@powerdns.com>
Thu, 21 Jan 2021 10:10:19 +0000 (11:10 +0100)
committerPieter Lexis <pieter.lexis@powerdns.com>
Thu, 21 Jan 2021 10:10:19 +0000 (11:10 +0100)
This satisfies the SHOULD in RFC6761 section 6.3 point 4.

pdns/syncres.cc
regression-tests.recursor-dnssec/test_Simple.py
regression-tests.recursor-dnssec/test_SimpleTCP.py

index eb9d010458e480b44ac0006087d693b1c98892bf..a327f789d579791fad5ee541fef65c25570df975 100644 (file)
@@ -202,7 +202,7 @@ bool SyncRes::doSpecialNamesResolve(const DNSName &qname, const QType &qtype, co
       answers.push_back({QType::PTR, "localhost."});
   }
 
-  if (qname == localhost &&
+  if (qname.isPartOf(localhost) &&
       qclass == QClass::IN) {
     handled = true;
     if (qtype == QType::A || qtype == QType::ANY)
index 300710dbd3bcd78b7254f14436d7e4252394277f..e6c4e97455ad237a2275424a39e1c3195c5dd4b9 100644 (file)
@@ -85,6 +85,15 @@ auth-zones=authzone.example=configs/%s/authzone.zone""" % _confdir
         self.assertRcodeEqual(resPTR, dns.rcode.NOERROR)
         self.assertRRsetInAnswer(resPTR, expectedPTR)
 
+    def testLocalhostSubdomain(self):
+        queryA = dns.message.make_query('foo.localhost', 'A', want_dnssec=True)
+        expectedA = dns.rrset.from_text('foo.localhost.', 0, 'IN', 'A', '127.0.0.1')
+
+        resA = self.sendUDPQuery(queryA)
+
+        self.assertRcodeEqual(resA, dns.rcode.NOERROR)
+        self.assertRRsetInAnswer(resA, expectedA)
+
     def testIslandOfSecurity(self):
         query = dns.message.make_query('cname-to-islandofsecurity.secure.example.', 'A', want_dnssec=True)
 
index 60a38f6f16485821b351db6853167d26d9e8269c..b70900f7592b1f3e2ba65f982f89daf713450668 100644 (file)
@@ -85,6 +85,15 @@ auth-zones=authzone.example=configs/%s/authzone.zone""" % _confdir
         self.assertRcodeEqual(resPTR, dns.rcode.NOERROR)
         self.assertRRsetInAnswer(resPTR, expectedPTR)
 
+    def testLocalhostSubdomain(self):
+        queryA = dns.message.make_query('foo.localhost', 'A', want_dnssec=True)
+        expectedA = dns.rrset.from_text('foo.localhost.', 0, 'IN', 'A', '127.0.0.1')
+
+        resA = self.sendTCPQuery(queryA)
+
+        self.assertRcodeEqual(resA, dns.rcode.NOERROR)
+        self.assertRRsetInAnswer(resA, expectedA)
+
     def testIslandOfSecurity(self):
         query = dns.message.make_query('cname-to-islandofsecurity.secure.example.', 'A', want_dnssec=True)