Browse Source

Correctly handle SVCB/HTTPS svcparam quoting when parsing rdata text

pull/1195/head
Ross McFarland 1 year ago
parent
commit
e53e21f172
No known key found for this signature in database GPG Key ID: 943B179E15D3B22A
3 changed files with 16 additions and 2 deletions
  1. +1
    -0
      CHANGELOG.md
  2. +8
    -2
      octodns/record/svcb.py
  3. +7
    -0
      tests/test_octodns_record_svcb.py

+ 1
- 0
CHANGELOG.md View File

@ -2,6 +2,7 @@
* MetaProcessor.include_extra to add support for arbitrary extra values to be
set on the meta record.
* Correctly handled quoted svcparams when parsing SVCB/HTTPS rdata text
## v1.9.1 - 2024-06-21 - What's in a name


+ 8
- 2
octodns/record/svcb.py View File

@ -102,6 +102,8 @@ def validate_svckey_number(paramkey):
def parse_rdata_text_svcparamvalue_list(svcparamvalue):
if svcparamvalue.startswith('"'):
svcparamvalue = svcparamvalue[1:-1]
return svcparamvalue.split(',')
@ -158,11 +160,15 @@ class SvcbValue(EqualityTupleMixin, dict):
if paramkey in params.keys():
raise RrParseError(f'{paramkey} is specified twice')
if len(paramvalue) != 0:
params[paramkey] = paramvalue[0]
parse_rdata_text = SUPPORTED_PARAMS.get(paramkey, {}).get(
'parse_rdata_text', None
)
if parse_rdata_text is not None:
if parse_rdata_text is None:
v = paramvalue[0]
if v.startswith('"'):
v = v[1:-1]
params[paramkey] = v
else:
params[paramkey] = parse_rdata_text(paramvalue[0])
else:
params[paramkey] = None


+ 7
- 0
tests/test_octodns_record_svcb.py View File

@ -177,6 +177,13 @@ class TestRecordSvcb(TestCase):
)
self.assertEqual(rdata, record.values[0].rdata_text)
# quoted params need to be correctly handled
rdata = '1 svcb.unit.tests. no-default-alpn port=8080 ipv4hint="192.0.2.2,192.0.2.53" key3333="foobar"'
record = SvcbRecord(
zone, 'svc', {'ttl': 32, 'value': SvcbValue.parse_rdata_text(rdata)}
)
self.assertEqual(rdata.replace('"', ''), record.values[0].rdata_text)
def test_svcb_value(self):
a = SvcbValue(
{'svcpriority': 0, 'targetname': 'foo.', 'svcparams': dict()}


Loading…
Cancel
Save