From 29598f2a5d8a6864b3b31e3e0ff3ec8b5c0bca3c Mon Sep 17 00:00:00 2001 From: Mads Tandrup Date: Mon, 24 Sep 2018 13:38:14 +0200 Subject: [PATCH 1/3] Avoid escaping semicolon in Azure DNS --- octodns/provider/azuredns.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/octodns/provider/azuredns.py b/octodns/provider/azuredns.py index b3bff6c..13a18ae 100644 --- a/octodns/provider/azuredns.py +++ b/octodns/provider/azuredns.py @@ -5,6 +5,8 @@ from __future__ import absolute_import, division, print_function, \ unicode_literals +import string + from azure.common.credentials import ServicePrincipalCredentials from azure.mgmt.dns import DnsManagementClient from msrestazure.azure_exceptions import CloudError @@ -18,6 +20,16 @@ from ..record import Record from .base import BaseProvider +def escape_semicolon(s): + assert s + return string.replace(s, ';', '\\;') + + +def unescape_semicolon(s): + assert s + return string.replace(s, '\\;', ';') + + class _AzureRecord(object): '''Wrapper for OctoDNS record for AzureProvider to make dns_client calls. @@ -123,9 +135,9 @@ class _AzureRecord(object): def _params_for_TXT(self, data, key_name, azure_class): try: # API for TxtRecord has list of str, even for singleton - values = data['values'] + values = [unescape_semicolon(v) for v in data['values']] except KeyError: - values = [data['value']] + values = [unescape_semicolon(data['value'])] return {key_name: [azure_class([v]) for v in values]} def _equals(self, b): @@ -394,7 +406,8 @@ class AzureProvider(BaseProvider): for ar in azrecord.srv_records]} def _data_for_TXT(self, azrecord): - return {'values': [reduce((lambda a, b: a + b), ar.value) + return {'values': [escape_semicolon(reduce((lambda a, b: a + b), + ar.value)) for ar in azrecord.txt_records]} def _apply_Create(self, change): From 6c07157bd39a0380dfd976cb7b60881eaf251484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mads=20M=C3=A6tzke=20Tandrup?= Date: Thu, 6 Dec 2018 21:33:25 +0100 Subject: [PATCH 2/3] Changed from string.replace to s.replace --- octodns/provider/azuredns.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/octodns/provider/azuredns.py b/octodns/provider/azuredns.py index 13a18ae..2d394e9 100644 --- a/octodns/provider/azuredns.py +++ b/octodns/provider/azuredns.py @@ -22,12 +22,12 @@ from .base import BaseProvider def escape_semicolon(s): assert s - return string.replace(s, ';', '\\;') + return s.replace(';', '\\;') def unescape_semicolon(s): assert s - return string.replace(s, '\\;', ';') + return s.replace('\\;', ';') class _AzureRecord(object): From 32756fb815c72927d30ba3546225a2c374efd811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mads=20M=C3=A6tzke=20Tandrup?= Date: Thu, 6 Dec 2018 21:39:09 +0100 Subject: [PATCH 3/3] Remove unused import --- octodns/provider/azuredns.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/octodns/provider/azuredns.py b/octodns/provider/azuredns.py index 2d394e9..2554a01 100644 --- a/octodns/provider/azuredns.py +++ b/octodns/provider/azuredns.py @@ -5,8 +5,6 @@ from __future__ import absolute_import, division, print_function, \ unicode_literals -import string - from azure.common.credentials import ServicePrincipalCredentials from azure.mgmt.dns import DnsManagementClient from msrestazure.azure_exceptions import CloudError