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


+ 10
- 0
tests/test_octodns_provider_googlecloud.py View File

@ -427,3 +427,13 @@ class TestGoogleCloudProvider(TestCase):
mock_zone.create.assert_called() mock_zone.create.assert_called()
provider.gcloud_client.zone.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