mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-10 20:19:59 -04:00
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).
(cherry picked from commit a556199c7b)
This commit is contained in:
parent
7809004875
commit
fb5add033b
1 changed files with 31 additions and 0 deletions
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in a new issue