]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Import dnspython modules explicitly in custom servers
authorŠtěpán Balážik <stepan@isc.org>
Thu, 30 Oct 2025 13:43:47 +0000 (14:43 +0100)
committerŠtěpán Balážik (GitLab job 6645047) <stepan@isc.org>
Thu, 18 Dec 2025 12:50:57 +0000 (12:50 +0000)
Previously, the server relied on the modules being imported by the
isctest.asyncserver module. This is fragile and confuses tooling.

Clean up stray imports in the process.

(cherry picked from commit 5761de5531b4b5349b06baa4f3799bae3e684890)

16 files changed:
bin/tests/system/chain/ans3/ans.py
bin/tests/system/chain/ans4/ans.py
bin/tests/system/cookie/cookie_ans.py
bin/tests/system/dispatch/ans3/ans.py
bin/tests/system/dnssec/ans10/ans.py
bin/tests/system/fetchlimit/ans4/ans.py
bin/tests/system/forward/ans11/ans.py
bin/tests/system/forward/ans6/ans.py
bin/tests/system/isctest/asyncserver.py
bin/tests/system/qmin/ans2/ans.py
bin/tests/system/qmin/ans4/ans.py
bin/tests/system/qmin/qmin_ans.py
bin/tests/system/rpzrecurse/ans5/ans.py
bin/tests/system/statistics/ans4/ans.py
bin/tests/system/xfer/ans9/ans.py
bin/tests/system/zero/ans5/ans.py

index 3309ba286b98fe8216fb1b26dd0eaeaac969e247..299f04235441f4cf7d20062313854ec604c4d3e0 100755 (executable)
@@ -14,6 +14,7 @@ information regarding copyright ownership.
 from typing import AsyncGenerator
 
 import dns.name
+import dns.rcode
 import dns.rdataclass
 import dns.rdatatype
 import dns.rrset
index 618b36bdf534d5d6f912207ae57363927c4d5d6a..f175a88c1e0ba48c7637829cf7fd9dd18c1c38fe 100755 (executable)
@@ -19,8 +19,8 @@ import abc
 import logging
 import re
 
+import dns.name
 import dns.rcode
-import dns.rdata
 import dns.rdataclass
 import dns.rdatatype
 import dns.rrset
index 102832dd3fedd2b5ee11db1f0af7288a170bfdb6..d66511f38f1762080c68d3294e17e2ef5034537a 100644 (file)
 
 from typing import AsyncGenerator
 
-import dns
+import dns.edns
+import dns.message
+import dns.name
+import dns.rdatatype
+import dns.rrset
 import dns.tsigkeyring
 
 from isctest.asyncserver import (
@@ -68,7 +72,7 @@ def _tld(qctx: QueryContext) -> dns.name.Name:
 
 def _soa(qctx: QueryContext) -> dns.rrset.RRset:
     return dns.rrset.from_text(
-        _tld(qctx), 2, dns.rdataclass.IN, dns.rdatatype.SOA, ". . 0 0 0 0 2"
+        _tld(qctx), 2, qctx.qclass, dns.rdatatype.SOA, ". . 0 0 0 0 2"
     )
 
 
@@ -80,21 +84,19 @@ def _ns(qctx: QueryContext) -> dns.rrset.RRset:
     return dns.rrset.from_text(
         qctx.qname,
         1,
-        dns.rdataclass.IN,
+        qctx.qclass,
         dns.rdatatype.NS,
         _ns_name(qctx).to_text(),
     )
 
 
 def _legit_a(qctx: QueryContext) -> dns.rrset.RRset:
-    return dns.rrset.from_text(
-        qctx.qname, 1, dns.rdataclass.IN, dns.rdatatype.A, "10.53.0.9"
-    )
+    return dns.rrset.from_text(qctx.qname, 1, qctx.qclass, dns.rdatatype.A, "10.53.0.9")
 
 
 def _spoofed_a(qctx: QueryContext) -> dns.rrset.RRset:
     return dns.rrset.from_text(
-        qctx.qname, 1, dns.rdataclass.IN, dns.rdatatype.A, "10.53.0.10"
+        qctx.qname, 1, qctx.qclass, dns.rdatatype.A, "10.53.0.10"
     )
 
 
index 774f9a5414d514f0a2d94b4b1e5788ec5a65a7d1..97b1f2cf1fb6ec4354ff53e6320e9980919b9fb7 100644 (file)
@@ -11,7 +11,8 @@
 
 from typing import AsyncGenerator
 
-import dns
+import dns.flags
+import dns.rcode
 
 from isctest.asyncserver import (
     AsyncDnsServer,
index 24a4a0ea0a91bc09bff5a2d977e15477739745b5..f69d5ebe1489279f5aaab099c3e8f3894e9fac2d 100644 (file)
@@ -11,7 +11,8 @@
 
 from typing import AsyncGenerator
 
-import dns
+import dns.rdatatype
+import dns.rrset
 
 from isctest.asyncserver import (
     AsyncDnsServer,
@@ -33,7 +34,7 @@ class AddRrsigToAHandler(ResponseHandler):
             "gB+eISXAhSPZU2i/II0W9ZUhC2SCIrb94mlNvP5092WAeXxqN/vG43/1nmDly2Qs7y5VCjSMOGn85bnaMoAc7w=="
         )
         rrsig_rrset = dns.rrset.from_text(
-            qctx.qname, 1, dns.rdataclass.IN, dns.rdatatype.RRSIG, rrsig
+            qctx.qname, 1, qctx.qclass, dns.rdatatype.RRSIG, rrsig
         )
         qctx.response.answer.append(rrsig_rrset)
         yield DnsResponseSend(qctx.response)
@@ -48,7 +49,7 @@ class AddNsecToTxtHandler(ResponseHandler):
     ) -> AsyncGenerator[DnsResponseSend, None]:
         nsec = f"{qctx.qname.to_text()} A NS SOA RRSIG NSEC"
         nsec_rrset = dns.rrset.from_text(
-            qctx.qname, 1, dns.rdataclass.IN, dns.rdatatype.NSEC, nsec
+            qctx.qname, 1, qctx.qclass, dns.rdatatype.NSEC, nsec
         )
         qctx.response.authority.append(nsec_rrset)
         yield DnsResponseSend(qctx.response)
index 9797735a82c9ec44ef936d4f8f64a56a33db98d2..cd7602366b6da177c5b31ade8d102481f85dafdc 100644 (file)
@@ -13,7 +13,9 @@ information regarding copyright ownership.
 
 from typing import AsyncGenerator
 
-import dns
+import dns.rcode
+import dns.rdatatype
+import dns.rrset
 
 from isctest.asyncserver import (
     ControllableAsyncDnsServer,
index 0b4ec5682e194c376da0c5a9cda38f95b5600c20..b5b590aabf4fbafef5840624225678bb687b6837 100644 (file)
@@ -14,6 +14,7 @@ information regarding copyright ownership.
 from typing import AsyncGenerator
 
 import dns.rdatatype
+import dns.rrset
 
 from isctest.asyncserver import (
     ControllableAsyncDnsServer,
index ac1db7ed1e5ad266711ac137f1a544a9340060e9..fdcbe7d392d0a7a46ab301e79b8ce2abe7c62d57 100644 (file)
@@ -13,7 +13,10 @@ information regarding copyright ownership.
 
 from typing import AsyncGenerator
 
-import dns
+import dns.name
+import dns.rcode
+import dns.rdatatype
+import dns.rrset
 
 from isctest.asyncserver import (
     ControllableAsyncDnsServer,
index ffe83ba61cb050d16772130c49f2b12214e4e86a..cd7d7027c7e474f7b9ea91d7ab1b7c8461d738bc 100644 (file)
@@ -38,12 +38,15 @@ import signal
 import struct
 import sys
 
+import dns.exception
 import dns.flags
 import dns.message
 import dns.name
 import dns.node
 import dns.rcode
+import dns.rdata
 import dns.rdataclass
+import dns.rdataset
 import dns.rdatatype
 import dns.rrset
 import dns.tsig
index 673b8ff37ad6f61d7c5f090110d4b19c01fd1328..5625a611fb0350524f2323f4238ac49bbd09c0dc 100644 (file)
@@ -16,8 +16,8 @@ from typing import AsyncGenerator
 import dns.message
 import dns.name
 import dns.rcode
-import dns.rdataclass
 import dns.rdatatype
+import dns.rrset
 
 from isctest.asyncserver import (
     AsyncDnsServer,
@@ -63,12 +63,8 @@ def send_delegation(
     ADDITIONAL section.
     """
     ns_name = "ns." + zone_cut.to_text()
-    ns_rrset = dns.rrset.from_text(
-        zone_cut, 2, dns.rdataclass.IN, dns.rdatatype.NS, ns_name
-    )
-    a_rrset = dns.rrset.from_text(
-        ns_name, 2, dns.rdataclass.IN, dns.rdatatype.A, target_addr
-    )
+    ns_rrset = dns.rrset.from_text(zone_cut, 2, qctx.qclass, dns.rdatatype.NS, ns_name)
+    a_rrset = dns.rrset.from_text(ns_name, 2, qctx.qclass, dns.rdatatype.A, target_addr)
 
     response = dns.message.make_response(qctx.query)
     response.set_rcode(dns.rcode.NOERROR)
index 22334372beff346c846ecb26c2e603bbb654cfa0..74b9d9fa80701da330a9982a729993c2bb60c83e 100644 (file)
@@ -14,6 +14,7 @@ information regarding copyright ownership.
 from typing import AsyncGenerator
 
 import dns.rcode
+import dns.rdatatype
 
 from isctest.asyncserver import (
     AsyncDnsServer,
index c610eb57263a3fb330bdf83a9dd2cff0a6456bbd..b78e723ecba07331ecbc3b2fb9633e4b821195bf 100644 (file)
@@ -16,7 +16,6 @@ from typing import AsyncGenerator
 import abc
 
 import dns.rcode
-import dns.rdataclass
 import dns.rdatatype
 
 from isctest.asyncserver import (
index 85acf15af5de8372e6adf646cfe29c6807a97830..3132fca0918d7ed4442684004545d118c17546e2 100644 (file)
@@ -13,7 +13,9 @@ information regarding copyright ownership.
 
 from typing import AsyncGenerator
 
-import dns
+import dns.rcode
+import dns.rdatatype
+import dns.rrset
 
 from isctest.asyncserver import (
     AsyncDnsServer,
@@ -32,7 +34,7 @@ class ReplyA(ResponseHandler):
         self, qctx: QueryContext
     ) -> AsyncGenerator[DnsResponseSend, None]:
         a_rrset = dns.rrset.from_text(
-            qctx.qname, 300, dns.rdataclass.IN, dns.rdatatype.A, "10.53.0.5"
+            qctx.qname, 300, qctx.qclass, dns.rdatatype.A, "10.53.0.5"
         )
         qctx.response.answer.append(a_rrset)
         yield DnsResponseSend(qctx.response)
index f353fc6e957966ff245c71ba0ab1ed0450620e27..a5aa118ade15028af955e1000391e61f175d11f5 100644 (file)
@@ -13,7 +13,9 @@ information regarding copyright ownership.
 
 from typing import AsyncGenerator
 
-import dns
+import dns.rcode
+import dns.rdatatype
+import dns.rrset
 
 from isctest.asyncserver import (
     AsyncDnsServer,
index f1a4bf5437228e72ef73537aa2d975925905f477..a07a214a3beee510162a5300cd7991afed5ac205 100644 (file)
@@ -14,7 +14,6 @@ information regarding copyright ownership.
 from typing import AsyncGenerator
 
 import dns.message
-import dns.rdataclass
 import dns.rdatatype
 import dns.rrset
 
@@ -52,7 +51,7 @@ class AXFRServer(DomainHandler):
         soa_rrset = dns.rrset.from_text(
             qctx.qname,
             300,
-            dns.rdataclass.IN,
+            qctx.qclass,
             dns.rdatatype.SOA,
             f". . {self.soa_version} 0 0 0 0",
         )
@@ -79,7 +78,7 @@ class AXFRServer(DomainHandler):
         # will already have been done with the mandatory stuff by then.
         ns_message = dns.message.make_response(qctx.query)
         ns_rrset = dns.rrset.from_text(
-            qctx.qname, 300, dns.rdataclass.IN, dns.rdatatype.NS, "."
+            qctx.qname, 300, qctx.qclass, dns.rdatatype.NS, "."
         )
         ns_message.answer.append(ns_rrset)
 
@@ -90,7 +89,7 @@ class AXFRServer(DomainHandler):
         txt_rrset = dns.rrset.from_text(
             qctx.qname,
             300,
-            dns.rdataclass.IN,
+            qctx.qclass,
             dns.rdatatype.TXT,
             "foo bar",
         )
index e3438bfd73f519d3d42ac4f0ed2b0b6804b2b7a3..a7f63913cf8985cad408b2c4dfe0c7e16f5132ef 100644 (file)
@@ -14,10 +14,7 @@ information regarding copyright ownership.
 import ipaddress
 from typing import AsyncGenerator
 
-import dns.flags
-import dns.message
-import dns.rdata
-import dns.rdataclass
+import dns.rcode
 import dns.rdatatype
 import dns.rrset