From 25c1ab4e123e1898473151b3362bcd30eafc1620 Mon Sep 17 00:00:00 2001 From: Sven Luethi Date: Tue, 11 Aug 2026 10:58:23 +0200 Subject: [PATCH] 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. --- netbox_dns_bridge/request_handler.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/netbox_dns_bridge/request_handler.py b/netbox_dns_bridge/request_handler.py index a832543..60ead04 100644 --- a/netbox_dns_bridge/request_handler.py +++ b/netbox_dns_bridge/request_handler.py @@ -283,8 +283,9 @@ class DNSBaseRequestHandler(socketserver.BaseRequestHandler): return # Check if catalog zone - if dname == "catz" or dname == f"{nb_view.name}.catz": - zone = catzm.create_zone(dname, nb_view.name) + dname_lower = dname.lower() + if dname_lower == "catz" or dname_lower == f"{nb_view.name.lower()}.catz": + zone = catzm.create_zone(dname_lower, nb_view.name) else: zone = self._get_zone_from_nb(dname, nb_view.name) # When zone was not found, let client know