rollback changes to semicolon escaping
All checks were successful
check code / check-code (push) Successful in 27s

This commit is contained in:
Ivan Schaller 2024-02-29 21:45:03 +01:00
parent f38a1036b7
commit 91ba03af7f
2 changed files with 20 additions and 27 deletions

View file

@ -90,21 +90,14 @@ class NetBoxDNSProvider(octodns.provider.base.BaseProvider):
return absolute_value return absolute_value
@staticmethod def _escape_semicolon(self, value: str) -> str:
def _fix_semicolon(value: str, escape: bool) -> str: fixed = value.replace(";", "\\;")
"""escape and un-escape semicolons in record values for netbox/octodns self.log.debug(f"in='{value}', fixed='{fixed}'")
return fixed
@param value: the record value
@param escape: if set to true, all semicolons get escaped with a backslash.
if false it un-escapes all semicolons.
@return: the modified record value
"""
if escape:
fixed = value.replace(";", "\\;")
else:
fixed = value.replace("\\;", ";")
def _unescape_semicolon(self, value: str) -> str:
fixed = value.replace("\\\\", "\\").replace("\\;", ";")
self.log.debug(f"in='{value}', fixed='{fixed}'")
return fixed return fixed
def _get_nb_view(self, view: str | None | Literal[False]) -> dict[str, int | str]: def _get_nb_view(self, view: str | None | Literal[False]) -> dict[str, int | str]:
@ -212,7 +205,7 @@ class NetBoxDNSProvider(octodns.provider.base.BaseProvider):
} }
case "SPF" | "TXT": case "SPF" | "TXT":
value = self._fix_semicolon(rcd_value, escape=True) value = self._escape_semicolon(rcd_value)
case "SRV": case "SRV":
value = { value = {
@ -370,7 +363,7 @@ class NetBoxDNSProvider(octodns.provider.base.BaseProvider):
name=rcd_name, name=rcd_name,
type=change.new._type, type=change.new._type,
ttl=change.new.ttl, ttl=change.new.ttl,
value=self._fix_semicolon(record, escape=False), value=self._unescape_semicolon(record),
disable_ptr=self.disable_ptr, disable_ptr=self.disable_ptr,
) )
) )
@ -430,7 +423,7 @@ class NetBoxDNSProvider(octodns.provider.base.BaseProvider):
name=rcd_name, name=rcd_name,
type=change.new._type, type=change.new._type,
ttl=change.new.ttl, ttl=change.new.ttl,
value=self._fix_semicolon(record, escape=False), value=self._unescape_semicolon(record),
disable_ptr=self.disable_ptr, disable_ptr=self.disable_ptr,
) )
self.log.debug(f"ADD {nb_record.type} {nb_record.name} {nb_record.value}") self.log.debug(f"ADD {nb_record.type} {nb_record.name} {nb_record.value}")

View file

@ -14,7 +14,7 @@ DEFAULT_CONFIG = {
def test_escape1(): def test_escape1():
nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG)
rcd_value = r"v=TLSRPTv1; rua=mailto:tlsrpt@example.com" rcd_value = r"v=TLSRPTv1; rua=mailto:tlsrpt@example.com"
value = nbdns._fix_semicolon(rcd_value, escape=True) value = nbdns._escape_semicolon(rcd_value)
assert value == r"v=TLSRPTv1\; rua=mailto:tlsrpt@example.com" assert value == r"v=TLSRPTv1\; rua=mailto:tlsrpt@example.com"
@ -22,7 +22,7 @@ def test_escape1():
def test_escape2(): def test_escape2():
nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG)
rcd_value = r"v=TLSRPTv1\; rua=mailto:tlsrpt@example.com" rcd_value = r"v=TLSRPTv1\; rua=mailto:tlsrpt@example.com"
value = nbdns._fix_semicolon(rcd_value, escape=True) value = nbdns._escape_semicolon(rcd_value)
assert value == r"v=TLSRPTv1\\; rua=mailto:tlsrpt@example.com" assert value == r"v=TLSRPTv1\\; rua=mailto:tlsrpt@example.com"
@ -30,7 +30,7 @@ def test_escape2():
def test_escape3(): def test_escape3():
nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG)
rcd_value = r"t=y\;o=~\;" rcd_value = r"t=y\;o=~\;"
value = nbdns._fix_semicolon(rcd_value, escape=True) value = nbdns._escape_semicolon(rcd_value)
assert value == r"t=y\\;o=~\\;" assert value == r"t=y\\;o=~\\;"
@ -38,7 +38,7 @@ def test_escape3():
def test_escape4(): def test_escape4():
nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG)
rcd_value = r"t=y;o=~;" rcd_value = r"t=y;o=~;"
value = nbdns._fix_semicolon(rcd_value, escape=True) value = nbdns._escape_semicolon(rcd_value)
assert value == r"t=y\;o=~\;" assert value == r"t=y\;o=~\;"
@ -46,7 +46,7 @@ def test_escape4():
def test_unescape1(): def test_unescape1():
nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG)
rcd_value = r"v=TLSRPTv1\; rua=mailto:tlsrpt@example.com" rcd_value = r"v=TLSRPTv1\; rua=mailto:tlsrpt@example.com"
value = nbdns._fix_semicolon(rcd_value, escape=False) value = nbdns._unescape_semicolon(rcd_value)
assert value == r"v=TLSRPTv1; rua=mailto:tlsrpt@example.com" assert value == r"v=TLSRPTv1; rua=mailto:tlsrpt@example.com"
@ -54,22 +54,22 @@ def test_unescape1():
def test_unescape2(): def test_unescape2():
nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG)
rcd_value = r"v=TLSRPTv1\\; rua=mailto:tlsrpt@example.com" rcd_value = r"v=TLSRPTv1\\; rua=mailto:tlsrpt@example.com"
value = nbdns._fix_semicolon(rcd_value, escape=False) value = nbdns._unescape_semicolon(rcd_value)
assert value == r"v=TLSRPTv1\; rua=mailto:tlsrpt@example.com" assert value == r"v=TLSRPTv1; rua=mailto:tlsrpt@example.com"
def test_unescape3(): def test_unescape3():
nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG)
rcd_value = r"t=y\\;o=~\;" rcd_value = r"t=y\\;o=~\;"
value = nbdns._fix_semicolon(rcd_value, escape=False) value = nbdns._unescape_semicolon(rcd_value)
assert value == r"t=y\;o=~;" assert value == r"t=y;o=~;"
def test_unescape4(): def test_unescape4():
nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG) nbdns = NetBoxDNSProvider(**DEFAULT_CONFIG)
rcd_value = r"t=y;o=~;" rcd_value = r"t=y;o=~;"
value = nbdns._fix_semicolon(rcd_value, escape=False) value = nbdns._unescape_semicolon(rcd_value)
assert value == r"t=y;o=~;" assert value == r"t=y;o=~;"