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:
Sven Luethi authored and Sven Luthi committed 2026-08-11 18:28:57 +02:00
1 parent 627a3a5712
commit 25c1ab4e12
1 file changed
+3 -2
+3 -2
View File
@@ -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