From: Štěpán Balážik Date: Thu, 25 Dec 2025 15:58:35 +0000 (+0100) Subject: Store the most specific matched domain in DomainHandler X-Git-Tag: v9.21.18~11^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b89cc2bd862ad12a7983df3ca317b33406ac9868;p=thirdparty%2Fbind9.git Store the most specific matched domain in DomainHandler Store the most specific matching domain in DomainHandler and expose it through the `matched_domain` property for subclasses to use in their implementations of `get_responses`. --- diff --git a/bin/tests/system/isctest/asyncserver.py b/bin/tests/system/isctest/asyncserver.py index 165a6db9ded..3b4529ebe88 100644 --- a/bin/tests/system/isctest/asyncserver.py +++ b/bin/tests/system/isctest/asyncserver.py @@ -649,6 +649,8 @@ class DomainHandler(ResponseHandler): The derived class must specify a list of `domains` that it wants to handle. Queries for any of these domains (and their subdomains) will then be passed to the `get_response()` method in the derived class. + + The most specific matching domain is stored in the `matched_domain` attribute. """ @property @@ -660,9 +662,15 @@ class DomainHandler(ResponseHandler): raise NotImplementedError def __init__(self) -> None: - self._domains: List[dns.name.Name] = [ - dns.name.from_text(d) for d in self.domains - ] + self._domains: List[dns.name.Name] = sorted( + [dns.name.from_text(d) for d in self.domains], reverse=True + ) + self._matched_domain: Optional[dns.name.Name] = None + + @property + def matched_domain(self) -> dns.name.Name: + assert self._matched_domain is not None + return self._matched_domain def __str__(self) -> str: return f"{self.__class__.__name__}(domains: {', '.join(self.domains)})" @@ -672,8 +680,10 @@ class DomainHandler(ResponseHandler): Handle queries whose QNAME matches any of the domains handled by this class. """ + self._matched_domain = None for domain in self._domains: if qctx.qname.is_subdomain(domain): + self._matched_domain = domain return True return False