Adds back the changes made to support ipv6 in commit 8fba131230 but that were reverted with commit ca51a6054d to allow proper merging of another complex PR. Closes #11 again
Also includes a small bug fix that was added with commit6bbb2e9905but that was also temporarily reverted with45f9631a98.
This commit is contained in:
1 parent
562f54d481
commit
1fae3bfe54
1 file changed
+40
-5
@@ -450,16 +450,19 @@ class DNSBaseRequestHandler(socketserver.BaseRequestHandler):
|
|||||||
continue_on_error=False,
|
continue_on_error=False,
|
||||||
ignore_trailing=True
|
ignore_trailing=True
|
||||||
)
|
)
|
||||||
|
|
||||||
except dns.tsig.BadSignature as e:
|
except dns.tsig.BadSignature as e:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
f"Request denied from {peer} failed TSIG verification: {e}"
|
f"Request denied from {peer} failed TSIG verification: {e}"
|
||||||
)
|
)
|
||||||
self.denyRequestBadTSIG(wire, dns.rcode.BADSIG)
|
self.denyRequestBadTSIG(wire, dns.rcode.BADSIG)
|
||||||
return
|
return
|
||||||
except dns.message.UnknownTSIGKey as e:
|
|
||||||
|
except (dns.message.UnknownTSIGKey, dns.tsig.BadAlgorithm) as e:
|
||||||
logger.warning(f"Request denied from {peer} with bad TSIG key: {e}")
|
logger.warning(f"Request denied from {peer} with bad TSIG key: {e}")
|
||||||
self.denyRequestBadTSIG(wire, dns.rcode.BADKEY)
|
self.denyRequestBadTSIG(wire, dns.rcode.BADKEY)
|
||||||
return
|
return
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("Error parsing query: ", e)
|
logger.error("Error parsing query: ", e)
|
||||||
return
|
return
|
||||||
@@ -584,20 +587,52 @@ class TCPRequestHandler(DNSBaseRequestHandler):
|
|||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
|
|
||||||
class TCPDNSServer(socketserver.TCPServer):
|
class DNSAddressMixin:
|
||||||
|
def _resolve_address(self, server_address, socktype, proto):
|
||||||
|
host, port = server_address
|
||||||
|
|
||||||
|
infos = socket.getaddrinfo(
|
||||||
|
host,
|
||||||
|
port,
|
||||||
|
socket.AF_UNSPEC,
|
||||||
|
socktype,
|
||||||
|
proto,
|
||||||
|
socket.AI_PASSIVE
|
||||||
|
)
|
||||||
|
|
||||||
|
family, _, _, _, sockaddr = infos[0]
|
||||||
|
self.address_family = family
|
||||||
|
return sockaddr
|
||||||
|
|
||||||
|
|
||||||
|
class TCPDNSServer(DNSAddressMixin, socketserver.TCPServer):
|
||||||
allow_reuse_address = True
|
allow_reuse_address = True
|
||||||
|
|
||||||
def __init__(self, server_address, handler_class, keyring, tsig_view_map):
|
def __init__(self, server_address, handler_class, keyring, tsig_view_map):
|
||||||
super().__init__(server_address, handler_class)
|
sockaddr = self._resolve_address(
|
||||||
|
server_address,
|
||||||
|
socket.SOCK_STREAM,
|
||||||
|
socket.IPPROTO_TCP
|
||||||
|
)
|
||||||
|
|
||||||
|
super().__init__(sockaddr, handler_class)
|
||||||
|
|
||||||
self.keyring = keyring
|
self.keyring = keyring
|
||||||
self.tsig_view_map = tsig_view_map
|
self.tsig_view_map = tsig_view_map
|
||||||
|
|
||||||
|
|
||||||
class UDPDNSServer(socketserver.UDPServer):
|
class UDPDNSServer(DNSAddressMixin, socketserver.UDPServer):
|
||||||
allow_reuse_address = True
|
allow_reuse_address = True
|
||||||
|
|
||||||
def __init__(self, server_address, handler_class, keyring, tsig_view_map):
|
def __init__(self, server_address, handler_class, keyring, tsig_view_map):
|
||||||
super().__init__(server_address, handler_class)
|
sockaddr = self._resolve_address(
|
||||||
|
server_address,
|
||||||
|
socket.SOCK_DGRAM,
|
||||||
|
socket.IPPROTO_UDP
|
||||||
|
)
|
||||||
|
|
||||||
|
super().__init__(sockaddr, handler_class)
|
||||||
|
|
||||||
self.keyring = keyring
|
self.keyring = keyring
|
||||||
self.tsig_view_map = tsig_view_map
|
self.tsig_view_map = tsig_view_map
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user