From fa032b1ea3f8958bf3949e5b97d8a62418dd492b Mon Sep 17 00:00:00 2001 From: Sven Luethi Date: Fri, 28 Nov 2025 18:52:00 +0100 Subject: [PATCH] modified: src/netbox_plugin_bind_provisioner/__init__.py modified: src/netbox_plugin_bind_provisioner/management/commands/bind-transfer-endpoint.py Fixes bug: TXT records were truncated instead of chunked when larger then 255 characters and on semicolons. --- src/netbox_plugin_bind_provisioner/__init__.py | 2 +- .../management/commands/bind-transfer-endpoint.py | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/netbox_plugin_bind_provisioner/__init__.py b/src/netbox_plugin_bind_provisioner/__init__.py index abb3156..97f8d5f 100644 --- a/src/netbox_plugin_bind_provisioner/__init__.py +++ b/src/netbox_plugin_bind_provisioner/__init__.py @@ -5,7 +5,7 @@ from django.utils.translation import gettext_lazy as _ from django.dispatch import receiver from django.conf import settings -__version__ = "1.0.0" +__version__ = "1.0.1" logger = logging.getLogger(__name__) 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 4c9a30d..da07306 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 @@ -246,10 +246,21 @@ class DNSBaseRequestHandler(socketserver.BaseRequestHandler): # If the record has no TTL, use the zone default ttl = record.ttl or nb_zone.default_ttl + # Apply special quoting for TXT records to stop tokanizer + # from cutting it up: + if rdtype == dns.rdatatype.TXT: + if len(record.value) <= 255: + record_value = f'"{record.value}"' + else: + chunks = ['"{}"'.format(record.value[i:i+255]) for i in range(0, len(record.value), 255)] + record_value = " ".join(chunks) + else: + record_value = record.value + rdata = dns.rdata.from_text( dns.rdataclass.IN, rdtype, - record.value, + record_value, #asd relativize=False, origin=zone.origin, ) @@ -283,6 +294,7 @@ 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(