From fa27b3df006d8a211ddb28bbe03c452f97c89fc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0t=C4=9Bp=C3=A1n=20Bal=C3=A1=C5=BEik?= Date: Thu, 30 Oct 2025 14:43:47 +0100 Subject: [PATCH] Import dnspython modules explicitly in custom servers 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) --- bin/tests/system/chain/ans3/ans.py | 1 + bin/tests/system/chain/ans4/ans.py | 2 +- bin/tests/system/cookie/cookie_ans.py | 16 +++++++++------- bin/tests/system/dispatch/ans3/ans.py | 3 ++- bin/tests/system/dnssec/ans10/ans.py | 7 ++++--- bin/tests/system/fetchlimit/ans4/ans.py | 4 +++- bin/tests/system/forward/ans11/ans.py | 1 + bin/tests/system/forward/ans6/ans.py | 5 ++++- bin/tests/system/isctest/asyncserver.py | 3 +++ bin/tests/system/qmin/ans2/ans.py | 10 +++------- bin/tests/system/qmin/ans4/ans.py | 1 + bin/tests/system/qmin/qmin_ans.py | 1 - bin/tests/system/rpzrecurse/ans5/ans.py | 6 ++++-- bin/tests/system/statistics/ans4/ans.py | 4 +++- bin/tests/system/xfer/ans9/ans.py | 7 +++---- bin/tests/system/zero/ans5/ans.py | 5 +---- 16 files changed, 43 insertions(+), 33 deletions(-) diff --git a/bin/tests/system/chain/ans3/ans.py b/bin/tests/system/chain/ans3/ans.py index 3309ba286b..299f042354 100755 --- a/bin/tests/system/chain/ans3/ans.py +++ b/bin/tests/system/chain/ans3/ans.py @@ -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 diff --git a/bin/tests/system/chain/ans4/ans.py b/bin/tests/system/chain/ans4/ans.py index 618b36bdf5..f175a88c1e 100755 --- a/bin/tests/system/chain/ans4/ans.py +++ b/bin/tests/system/chain/ans4/ans.py @@ -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 diff --git a/bin/tests/system/cookie/cookie_ans.py b/bin/tests/system/cookie/cookie_ans.py index 102832dd3f..d66511f38f 100644 --- a/bin/tests/system/cookie/cookie_ans.py +++ b/bin/tests/system/cookie/cookie_ans.py @@ -11,7 +11,11 @@ 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" ) diff --git a/bin/tests/system/dispatch/ans3/ans.py b/bin/tests/system/dispatch/ans3/ans.py index 774f9a5414..97b1f2cf1f 100644 --- a/bin/tests/system/dispatch/ans3/ans.py +++ b/bin/tests/system/dispatch/ans3/ans.py @@ -11,7 +11,8 @@ from typing import AsyncGenerator -import dns +import dns.flags +import dns.rcode from isctest.asyncserver import ( AsyncDnsServer, diff --git a/bin/tests/system/dnssec/ans10/ans.py b/bin/tests/system/dnssec/ans10/ans.py index 24a4a0ea0a..f69d5ebe14 100644 --- a/bin/tests/system/dnssec/ans10/ans.py +++ b/bin/tests/system/dnssec/ans10/ans.py @@ -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) diff --git a/bin/tests/system/fetchlimit/ans4/ans.py b/bin/tests/system/fetchlimit/ans4/ans.py index 9797735a82..cd7602366b 100644 --- a/bin/tests/system/fetchlimit/ans4/ans.py +++ b/bin/tests/system/fetchlimit/ans4/ans.py @@ -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, diff --git a/bin/tests/system/forward/ans11/ans.py b/bin/tests/system/forward/ans11/ans.py index 0b4ec5682e..b5b590aabf 100644 --- a/bin/tests/system/forward/ans11/ans.py +++ b/bin/tests/system/forward/ans11/ans.py @@ -14,6 +14,7 @@ information regarding copyright ownership. from typing import AsyncGenerator import dns.rdatatype +import dns.rrset from isctest.asyncserver import ( ControllableAsyncDnsServer, diff --git a/bin/tests/system/forward/ans6/ans.py b/bin/tests/system/forward/ans6/ans.py index ac1db7ed1e..fdcbe7d392 100644 --- a/bin/tests/system/forward/ans6/ans.py +++ b/bin/tests/system/forward/ans6/ans.py @@ -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, diff --git a/bin/tests/system/isctest/asyncserver.py b/bin/tests/system/isctest/asyncserver.py index ffe83ba61c..cd7d7027c7 100644 --- a/bin/tests/system/isctest/asyncserver.py +++ b/bin/tests/system/isctest/asyncserver.py @@ -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 diff --git a/bin/tests/system/qmin/ans2/ans.py b/bin/tests/system/qmin/ans2/ans.py index 673b8ff37a..5625a611fb 100644 --- a/bin/tests/system/qmin/ans2/ans.py +++ b/bin/tests/system/qmin/ans2/ans.py @@ -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) diff --git a/bin/tests/system/qmin/ans4/ans.py b/bin/tests/system/qmin/ans4/ans.py index 22334372be..74b9d9fa80 100644 --- a/bin/tests/system/qmin/ans4/ans.py +++ b/bin/tests/system/qmin/ans4/ans.py @@ -14,6 +14,7 @@ information regarding copyright ownership. from typing import AsyncGenerator import dns.rcode +import dns.rdatatype from isctest.asyncserver import ( AsyncDnsServer, diff --git a/bin/tests/system/qmin/qmin_ans.py b/bin/tests/system/qmin/qmin_ans.py index c610eb5726..b78e723ecb 100644 --- a/bin/tests/system/qmin/qmin_ans.py +++ b/bin/tests/system/qmin/qmin_ans.py @@ -16,7 +16,6 @@ from typing import AsyncGenerator import abc import dns.rcode -import dns.rdataclass import dns.rdatatype from isctest.asyncserver import ( diff --git a/bin/tests/system/rpzrecurse/ans5/ans.py b/bin/tests/system/rpzrecurse/ans5/ans.py index 85acf15af5..3132fca091 100644 --- a/bin/tests/system/rpzrecurse/ans5/ans.py +++ b/bin/tests/system/rpzrecurse/ans5/ans.py @@ -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) diff --git a/bin/tests/system/statistics/ans4/ans.py b/bin/tests/system/statistics/ans4/ans.py index f353fc6e95..a5aa118ade 100644 --- a/bin/tests/system/statistics/ans4/ans.py +++ b/bin/tests/system/statistics/ans4/ans.py @@ -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, diff --git a/bin/tests/system/xfer/ans9/ans.py b/bin/tests/system/xfer/ans9/ans.py index f1a4bf5437..a07a214a3b 100644 --- a/bin/tests/system/xfer/ans9/ans.py +++ b/bin/tests/system/xfer/ans9/ans.py @@ -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", ) diff --git a/bin/tests/system/zero/ans5/ans.py b/bin/tests/system/zero/ans5/ans.py index e3438bfd73..a7f63913cf 100644 --- a/bin/tests/system/zero/ans5/ans.py +++ b/bin/tests/system/zero/ans5/ans.py @@ -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