Browse Source

Merge pull request #194 from sukiyaki/googledns-semicolon-escapes

Escape unescaped semicolons coming out of Google Cloud DNS
pull/216/head
Ross McFarland 8 years ago
committed by GitHub
parent
commit
8b78f9093a
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
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
@ -275,12 +276,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

@ -446,3 +446,13 @@ class TestGoogleCloudProvider(TestCase):
self.assertRegexpMatches(mock_zone.name, '^[a-z][a-z0-9-]*[a-z0-9]$')
self.assertEqual(len(mock_zone.name), 63)
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