Make catalog zone name matching case-insensitive
DNS names are case-insensitive (RFC 4343), but the catalog-zone
dispatch compared dname verbatim:
if dname == "catz" or dname == f"{nb_view.name}.catz":
dname is derived from qname.to_text(), which preserves the casing the
client sent. A query for CATZ, Public.catz, or any other mixed-case
variant failed the comparison and fell through to _get_zone_from_nb,
which returned None, so the request was denied instead of being served
as a catalog zone.
Lowercase both sides before comparing. Pass the lowercased name to
create_zone so catalog zones always get a canonical lowercase origin,
and pass the original dname to _get_zone_from_nb to leave the regular
zone-lookup behavior unchanged.
This commit is contained in:
1 parent
627a3a5712
commit
25c1ab4e12
1 file changed
+3
-2
@@ -283,8 +283,9 @@ class DNSBaseRequestHandler(socketserver.BaseRequestHandler):
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Check if catalog zone
|
# Check if catalog zone
|
||||||
if dname == "catz" or dname == f"{nb_view.name}.catz":
|
dname_lower = dname.lower()
|
||||||
zone = catzm.create_zone(dname, nb_view.name)
|
if dname_lower == "catz" or dname_lower == f"{nb_view.name.lower()}.catz":
|
||||||
|
zone = catzm.create_zone(dname_lower, nb_view.name)
|
||||||
else:
|
else:
|
||||||
zone = self._get_zone_from_nb(dname, nb_view.name)
|
zone = self._get_zone_from_nb(dname, nb_view.name)
|
||||||
# When zone was not found, let client know
|
# When zone was not found, let client know
|
||||||
|
|||||||
Reference in new issue
Block a user