Browse Source

Escape unescaped semicolons coming out of Google Cloud DNS

pull/194/head
Masaki Tagawa 8 years ago
parent
commit
f62f824966
2 changed files with 16 additions and 2 deletions
  1. +6
    -2
      octodns/provider/googlecloud.py
  2. +10
    -0
      tests/test_octodns_provider_googlecloud.py

+ 6
- 2
octodns/provider/googlecloud.py View File

@ -9,6 +9,7 @@ import shlex
import time
from logging import getLogger
from uuid import uuid4
import re
from google.cloud import dns
@ -269,12 +270,15 @@ class GoogleCloudProvider(BaseProvider):
_data_for_PTR = _data_for_CNAME
_fix_semicolons = re.compile(r'(?<!\\);')
def _data_for_SPF(self, gcloud_record):
if len(gcloud_record.rrdatas) > 1:
return {
'values': gcloud_record.rrdatas}
'values': [self._fix_semicolons.sub('\;', rr)
for rr in gcloud_record.rrdatas]}
return {
'value': gcloud_record.rrdatas[0]}
'value': self._fix_semicolons.sub('\;', gcloud_record.rrdatas[0])}
def _data_for_SRV(self, gcloud_record):
return {'values': [{


+ 10
- 0
tests/test_octodns_provider_googlecloud.py View File

@ -427,3 +427,13 @@ class TestGoogleCloudProvider(TestCase):
mock_zone.create.assert_called()
provider.gcloud_client.zone.assert_called()
def test_semicolon_fixup(self):
provider = self._get_provider()
self.assertEquals({
'values': ['abcd\\; ef\\;g', 'hij\\; klm\\;n']
}, provider._data_for_TXT(
DummyResourceRecordSet(
'unit.tests.', 'TXT', 0, ['abcd; ef;g', 'hij\\; klm\\;n'])
))

Loading…
Cancel
Save