From: Michał Kępień Date: Thu, 18 Sep 2025 08:13:13 +0000 (+0200) Subject: Add a response handler matching on specific QNAMEs X-Git-Tag: v9.21.15~25^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a556199c7b7888706806a10508f5df8a0b2cb34e;p=thirdparty%2Fbind9.git Add a response handler matching on specific QNAMEs Add a new ResponseHandler subclass, QnameHandler, which enables conveniently matching specific QNAMEs (without also matching their subdomains like DomainHandler does). --- diff --git a/bin/tests/system/isctest/asyncserver.py b/bin/tests/system/isctest/asyncserver.py index b74b90c1051..e5277696cc3 100644 --- a/bin/tests/system/isctest/asyncserver.py +++ b/bin/tests/system/isctest/asyncserver.py @@ -554,6 +554,37 @@ class IgnoreAllQueries(ResponseHandler): yield ResponseDrop() +class QnameHandler(ResponseHandler): + """ + Base class used for deriving custom QNAME handlers. + + The derived class must specify a list of `qnames` that it wants to handle. + Queries for exactly these QNAMEs will then be passed to the + `get_response()` method in the derived class. + """ + + @property + @abc.abstractmethod + def qnames(self) -> List[str]: + """ + A list of QNAMEs handled by this class. + """ + raise NotImplementedError + + def __init__(self) -> None: + self._qnames: List[dns.name.Name] = [dns.name.from_text(d) for d in self.qnames] + + def __str__(self) -> str: + return f"{self.__class__.__name__}(QNAMEs: {', '.join(self.qnames)})" + + def match(self, qctx: QueryContext) -> bool: + """ + Handle queries whose QNAME matches any of the QNAMEs handled by this + class. + """ + return qctx.qname in self._qnames + + class DomainHandler(ResponseHandler): """ Base class used for deriving custom domain handlers.