modified: src/netbox_plugin_bind_provisioner/__init__.py

modified:   src/netbox_plugin_bind_provisioner/management/commands/bind-transfer-endpoint.py
Allows for TXT records to be added without quotation. This will apply the correct quoting and
chunking where needed.
This commit is contained in:
Sven Luethi committed 2025-11-29 13:36:18 +01:00
1 parent fa032b1ea3
commit d8f4b83c2a
2 files changed
+15 -10

No files matched your search

@@ -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.1"
__version__ = "1.0.2"
logger = logging.getLogger(__name__)
@@ -1,6 +1,7 @@
import logging
import socketserver
import os
#import re
import threading
import dns.query
import dns.message
@@ -246,21 +247,25 @@ 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
# Apply quoting for TXT records to stop tokanizer
# from cutting it up:
value = record.value
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
if not value.startswith('"') and not value.endswith('"'):
value = value.replace('"', '\\"')
if len(value) <= 255:
value = f'"{value}"'
else:
# 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)]
value = " ".join(chunks)
rdata = dns.rdata.from_text(
dns.rdataclass.IN,
rdtype,
record_value, #asd
value,
relativize=False,
origin=zone.origin,
)