]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Make static response handlers more specific
authorMichał Kępień <michal@isc.org>
Thu, 21 May 2026 09:52:56 +0000 (11:52 +0200)
committerMichał Kępień <michal@isc.org>
Thu, 21 May 2026 09:52:56 +0000 (11:52 +0200)
The RootNSHandler and ExampleNSHandler classes are only equipped to
respond to specific QNAME/QTYPE tuples, not all queries for a specific
QNAME.  Turn them into subclasses of QnameQtypeHandler and make them
only respond to QTYPE=NS queries to prevent sending NS responses for
non-NS queries.

bin/tests/system/resend_loop/ans3/ans.py

index d0cb6d2935f1398f94ac2d6280d6497b24bb8c45..b5a1e75463767fcab91a2d5fef57b169eeef7d22 100644 (file)
@@ -21,7 +21,7 @@ import dns.rrset
 from isctest.asyncserver import (
     AsyncDnsServer,
     DnsResponseSend,
-    QnameHandler,
+    QnameQtypeHandler,
     QueryContext,
     ResponseHandler,
     StaticResponseHandler,
@@ -53,24 +53,18 @@ def rrset(
     return dns.rrset.from_text(qname, ttl, dns.rdataclass.IN, rtype, rdata)
 
 
-class RootNSHandler(QnameHandler, StaticResponseHandler):
+class RootNSHandler(QnameQtypeHandler, StaticResponseHandler):
     qnames = ["."]
-    answer = [
-        rrset(".", dns.rdatatype.NS, "a.root-servers.nil."),
-    ]
-    additional = [
-        rrset("a.root-servers.nil.", dns.rdatatype.A, "10.53.0.3"),
-    ]
+    qtypes = [dns.rdatatype.NS]
+    answer = [rrset(".", dns.rdatatype.NS, "a.root-servers.nil.")]
+    additional = [rrset("a.root-servers.nil.", dns.rdatatype.A, "10.53.0.3")]
 
 
-class ExampleNSHandler(QnameHandler, StaticResponseHandler):
+class ExampleNSHandler(QnameQtypeHandler, StaticResponseHandler):
     qnames = ["example."]
-    answer = [
-        rrset("example.", dns.rdatatype.NS, "ns.example."),
-    ]
-    additional = [
-        rrset("ns.example.", dns.rdatatype.A, "10.53.0.3"),
-    ]
+    qtypes = [dns.rdatatype.NS]
+    answer = [rrset("example.", dns.rdatatype.NS, "ns.example.")]
+    additional = [rrset("ns.example.", dns.rdatatype.A, "10.53.0.3")]
 
 
 class CookieHandler(ResponseHandler):