From 55d891f38cf8cdb96d714cb3194b334a375ab689 Mon Sep 17 00:00:00 2001 From: Sven Luethi Date: Fri, 9 Jan 2026 13:36:08 +0100 Subject: [PATCH] modified: src/netbox_plugin_bind_provisioner/management/commands/bind-transfer-endpoint.py Slight changes to previous commit: 1. Stop converting the zone ID to string for catalog zone PTR record creation and simply use its int type. 2. Extend padding of ID in catalog zone PTR record from 6 digits to 9. Auto-incrementing of zone IDs may create larger IDs then expected if the turn-over of zones is high. Precautionary measure. 3. Fix catalog zone SOA record creation - A slight mistake was introduced in previous commit that would render the set the MNAME field to "invalid.zones.catz." rather than the intended "invalid." value. 4. Run code through black formater to stay compliant. --- .../commands/bind-transfer-endpoint.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/netbox_plugin_bind_provisioner/management/commands/bind-transfer-endpoint.py b/src/netbox_plugin_bind_provisioner/management/commands/bind-transfer-endpoint.py index cd51695..3ae9c85 100644 --- a/src/netbox_plugin_bind_provisioner/management/commands/bind-transfer-endpoint.py +++ b/src/netbox_plugin_bind_provisioner/management/commands/bind-transfer-endpoint.py @@ -1,7 +1,6 @@ import logging import socketserver import os -#import re import threading import dns.query import dns.message @@ -14,7 +13,6 @@ import dns.rdtypes import dns.exception import dns.renderer -# from hashlib import sha256 from django.core.management.base import BaseCommand from django.conf import settings from django.utils import timezone @@ -109,11 +107,9 @@ class CatalogZone: for nb_zone in nb_zones: ttl = 0 qname = dns.name.from_text(nb_zone.name, dns.name.root) - # zone_id = sha256(qname.to_text().encode()).hexdigest()[0:63] - zone_id = str(nb_zone.id) # Create PTR record - p_name = f"zid-{zone_id:>06}" + p_name = f"zid-{nb_zone.id:09d}" ptr_name = dns.name.from_text(p_name, ptr_base) assert ptr_name.is_subdomain(origin) rdata = dns.rdata.from_text( @@ -145,8 +141,8 @@ class CatalogZone: ttl = 0 rclass = dns.rdataclass.IN rtype = dns.rdatatype.SOA - mname = dns.name.from_text("invalid.", origin) - rname = dns.name.from_text("invalid.", origin) + mname = dns.name.from_text("invalid", dns.name.root) + rname = dns.name.from_text("invalid", dns.name.root) serial = cls._serial_obj.value refresh = 60 retry = 10 @@ -236,13 +232,16 @@ class DNSBaseRequestHandler(socketserver.BaseRequestHandler): value = record.value if rdtype == dns.rdatatype.TXT: if value.startswith('"') and value.endswith('"'): - value = value[1:-1].replace('" "', '').replace('"', '\"') + value = value[1:-1].replace('" "', "").replace('"', '"') if len(value) > 255: # This is a bug fix for netbox. If netbox allowed for # an unquoted value to be larger then 255 characters, # it misunderstood everything behind a ; as a comment. - chunks = ['"{}"'.format(value[i:i+255]) for i in range(0, len(value), 255)] + chunks = [ + '"{}"'.format(value[i : i + 255]) + for i in range(0, len(value), 255) + ] value = " ".join(chunks) else: value = f'"{value}"' @@ -284,7 +283,6 @@ class DNSBaseRequestHandler(socketserver.BaseRequestHandler): zone.replace_rdataset(name, rdataset) return zone - def denyRequestBadTSIG(self, wire, tsig_error: dns.rcode): # Use empty keyring to parse TSIG without validating query = dns.message.from_wire(