Use default_rcode for AsyncDnsServer where applicable

Rule of thumb: If a RCode is set unconditionally in all
ResponseHandlers, set it in the server constructor.
This commit is contained in:
Štěpán Balážik 2025-10-30 14:07:12 +01:00
parent c7d84dc86a
commit e4de7eb4f9
6 changed files with 12 additions and 21 deletions

View file

@ -443,7 +443,6 @@ class ChainResponseHandler(DomainHandler):
for rrset in self._additional_rrsets:
qctx.response.additional.append(rrset)
qctx.response.set_rcode(dns.rcode.NOERROR)
qctx.response.use_edns()
yield DnsResponseSend(qctx.response)
@ -473,7 +472,9 @@ class ChainResponseHandler(DomainHandler):
def main() -> None:
server = ControllableAsyncDnsServer(default_aa=True)
server = ControllableAsyncDnsServer(
default_aa=True, default_rcode=dns.rcode.NOERROR
)
server.install_control_command(ChainSetupCommand())
server.run()

View file

@ -29,13 +29,12 @@ class TruncateOnUdpHandler(ResponseHandler):
self, qctx: QueryContext
) -> AsyncGenerator[ResponseAction, None]:
assert qctx.protocol == DnsProtocol.UDP, "This server only supports UDP"
qctx.response.set_rcode(dns.rcode.NOERROR)
qctx.response.flags |= dns.flags.TC
yield DnsResponseSend(qctx.response)
def main() -> None:
server = AsyncDnsServer()
server = AsyncDnsServer(default_rcode=dns.rcode.NOERROR)
server.install_connection_handler(ConnectionReset(delay=1.0))
server.install_response_handler(TruncateOnUdpHandler())
server.run()

View file

@ -33,13 +33,14 @@ class MaybeDelayedAddressAnswerHandler(ResponseHandler):
rrset = dns.rrset.from_text(qctx.qname, 300, qctx.qclass, qctx.qtype, addr)
qctx.response.answer.append(rrset)
qctx.response.set_rcode(dns.rcode.NOERROR)
delay = 0.05 if qctx.qname.labels[0].startswith(b"latency") else 0.00
yield DnsResponseSend(qctx.response, delay=delay)
def main() -> None:
server = ControllableAsyncDnsServer(default_aa=True)
server = ControllableAsyncDnsServer(
default_aa=True, default_rcode=dns.rcode.NOERROR
)
server.install_control_command(ToggleResponsesCommand())
server.install_response_handler(MaybeDelayedAddressAnswerHandler())
server.run()

View file

@ -60,7 +60,6 @@ class ChaseDsHandler(ResponseHandler):
response_rdata = ". . 0 0 0 0 0"
response_section = qctx.response.authority
qctx.response.set_rcode(dns.rcode.NOERROR)
qctx.response.use_edns(None)
response_rrset = dns.rrset.from_text(
@ -72,7 +71,9 @@ class ChaseDsHandler(ResponseHandler):
def main() -> None:
server = ControllableAsyncDnsServer(default_aa=True)
server = ControllableAsyncDnsServer(
default_rcode=dns.rcode.NOERROR, default_aa=True
)
server.install_control_command(ToggleResponsesCommand())
server.install_response_handler(ChaseDsHandler())
server.run()

View file

@ -35,7 +35,6 @@ class ReplyA(ResponseHandler):
qctx.qname, 300, dns.rdataclass.IN, dns.rdatatype.A, "10.53.0.5"
)
qctx.response.answer.append(a_rrset)
qctx.response.set_rcode(dns.rcode.NOERROR)
yield DnsResponseSend(qctx.response)
@ -49,19 +48,10 @@ class IgnoreNs(ResponseHandler):
yield ResponseDrop()
class FallbackHandler(ResponseHandler):
async def get_responses(
self, qctx: QueryContext
) -> AsyncGenerator[DnsResponseSend, None]:
qctx.response.set_rcode(dns.rcode.NOERROR)
yield DnsResponseSend(qctx.response)
def main() -> None:
server = AsyncDnsServer(default_aa=True)
server = AsyncDnsServer(default_aa=True, default_rcode=dns.rcode.NOERROR)
server.install_response_handler(ReplyA())
server.install_response_handler(IgnoreNs())
server.install_response_handler(FallbackHandler())
server.run()

View file

@ -48,12 +48,11 @@ class IncrementARecordHandler(ResponseHandler):
qctx.response.answer.append(rrset)
self._ip_address += 1
qctx.response.set_rcode(dns.rcode.NOERROR)
yield DnsResponseSend(qctx.response)
def main() -> None:
server = AsyncDnsServer(default_aa=True)
server = AsyncDnsServer(default_aa=True, default_rcode=dns.rcode.NOERROR)
server.install_response_handler(IncrementARecordHandler())
server.run()