Allow adding multiple ResponseHandlers at once

Change this at call sites as well.
This commit is contained in:
Štěpán Balážik 2025-10-30 14:08:21 +01:00
parent e4de7eb4f9
commit d593af3a5f
9 changed files with 56 additions and 38 deletions

View file

@ -113,8 +113,7 @@ class Cve202125215(DomainHandler):
def main() -> None:
server = AsyncDnsServer(acknowledge_manual_dname_handling=True, default_aa=True)
server.install_response_handler(CnameThenDnameHandler())
server.install_response_handler(Cve202125215())
server.install_response_handlers([CnameThenDnameHandler(), Cve202125215()])
server.run()

View file

@ -205,10 +205,14 @@ class FallbackHandler(ResponseHandler):
def cookie_server(evil: bool) -> AsyncDnsServer:
server = AsyncDnsServer(acknowledge_tsig_dnspython_hacks=True)
server.install_response_handler(NsHandler(evil))
server.install_response_handler(GlueHandler(evil))
server.install_response_handler(TcpAHandler())
server.install_response_handler(WithtsigUdpAHandler())
server.install_response_handler(UdpAHandler())
server.install_response_handler(FallbackHandler())
server.install_response_handlers(
[
NsHandler(evil),
GlueHandler(evil),
TcpAHandler(),
WithtsigUdpAHandler(),
UdpAHandler(),
FallbackHandler(),
]
)
return server

View file

@ -56,8 +56,7 @@ class AddNsecToTxtHandler(ResponseHandler):
def main() -> None:
server = AsyncDnsServer()
server.install_response_handler(AddRrsigToAHandler())
server.install_response_handler(AddNsecToTxtHandler())
server.install_response_handlers([AddRrsigToAHandler(), AddNsecToTxtHandler()])
server.run()

View file

@ -810,6 +810,10 @@ class AsyncDnsServer(AsyncServer):
else:
self._response_handlers.append(handler)
def install_response_handlers(self, handlers: List[ResponseHandler]) -> None:
for handler in handlers:
self.install_response_handler(handler)
def uninstall_response_handler(self, handler: ResponseHandler) -> None:
"""
Remove the specified handler from the list of response handlers.

View file

@ -103,11 +103,15 @@ class StaleHandler(DomainHandler):
def main() -> None:
server = AsyncDnsServer()
server.install_response_handler(QueryLogger())
server.install_response_handler(BadHandler())
server.install_response_handler(UglyHandler())
server.install_response_handler(SlowHandler())
server.install_response_handler(StaleHandler())
server.install_response_handlers(
[
QueryLogger(),
BadHandler(),
UglyHandler(),
SlowHandler(),
StaleHandler(),
]
)
server.run()

View file

@ -39,10 +39,14 @@ class ZoopBoingSlowHandler(DelayedResponseHandler):
def main() -> None:
server = AsyncDnsServer()
server.install_response_handler(QueryLogger())
server.install_response_handler(ZoopBoingBadHandler())
server.install_response_handler(ZoopBoingUglyHandler())
server.install_response_handler(ZoopBoingSlowHandler())
server.install_response_handlers(
[
QueryLogger(),
ZoopBoingBadHandler(),
ZoopBoingUglyHandler(),
ZoopBoingSlowHandler(),
]
)
server.run()

View file

@ -85,11 +85,15 @@ class IckyPtangZoopBoingSlowHandler(DelayedResponseHandler):
def main() -> None:
server = AsyncDnsServer()
server.install_response_handler(QueryLogger())
server.install_response_handler(StaleHandler())
server.install_response_handler(IckyPtangZoopBoingBadHandler())
server.install_response_handler(IckyPtangZoopBoingUglyHandler())
server.install_response_handler(IckyPtangZoopBoingSlowHandler())
server.install_response_handlers(
[
QueryLogger(),
StaleHandler(),
IckyPtangZoopBoingBadHandler(),
IckyPtangZoopBoingUglyHandler(),
IckyPtangZoopBoingSlowHandler(),
]
)
server.run()

View file

@ -50,8 +50,7 @@ class IgnoreNs(ResponseHandler):
def main() -> None:
server = AsyncDnsServer(default_aa=True, default_rcode=dns.rcode.NOERROR)
server.install_response_handler(ReplyA())
server.install_response_handler(IgnoreNs())
server.install_response_handlers([ReplyA(), IgnoreNs()])
server.run()

View file

@ -159,18 +159,19 @@ class FallbackHandler(ResponseHandler):
def main() -> None:
server = AsyncDnsServer(default_rcode=dns.rcode.NOERROR)
for handler in (
BadGoodCnameHandler,
Cname1Handler,
Cname2Handler,
ExampleHandler,
FooInfoHandler,
NoDataHandler,
NxdomainHandler,
SubHandler,
FallbackHandler,
):
server.install_response_handler(handler())
server.install_response_handlers(
[
BadGoodCnameHandler(),
Cname1Handler(),
Cname2Handler(),
ExampleHandler(),
FooInfoHandler(),
NoDataHandler(),
NxdomainHandler(),
SubHandler(),
FallbackHandler(),
]
)
server.run()