From: Peter van Dijk Date: Fri, 15 Nov 2024 11:47:13 +0000 (+0100) Subject: SVCB parser: allow quotes around port= X-Git-Tag: rec-5.2.0-beta1~15^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F14823%2Fhead;p=thirdparty%2Fpdns.git SVCB parser: allow quotes around port= --- diff --git a/modules/tinydnsbackend/data b/modules/tinydnsbackend/data index dca063c8af..06c8f61611 100644 --- a/modules/tinydnsbackend/data +++ b/modules/tinydnsbackend/data @@ -20109,6 +20109,7 @@ :bar.svcb.example.com:28:\040\001\015\270\000\000\000\000\000\000\000\000\000\003\000\004:120 :bar.svcb.example.com:64:\000\001\000\000\001\000\003\002h2:120 :bar.svcb.example.com:64:\000\003\000\000\001\000\003\002h3\000\003\000\002\005\334:120 +:bar.svcb.example.com:64:\000\004\000\000\001\000\003\002h3\000\003\000\002\005\335:120 :baz.svcb.example.com:64:\000\000\004foo1\004svcb\007example\003net\000:120 :dsdelegation.example.com:43:m\341\010\001\312\361\352\256\315\253\347afpx\217\220\042EK\365\375\237\332:120 :escapedtext.example.com:16:\005begin\022the\040\042middle\042\040p\134art\007the\040end:120 diff --git a/modules/tinydnsbackend/data.cdb b/modules/tinydnsbackend/data.cdb index ecb1694777..98225edd8c 100644 Binary files a/modules/tinydnsbackend/data.cdb and b/modules/tinydnsbackend/data.cdb differ diff --git a/pdns/rcpgenerator.cc b/pdns/rcpgenerator.cc index 6a4569100c..3da0baa20e 100644 --- a/pdns/rcpgenerator.cc +++ b/pdns/rcpgenerator.cc @@ -335,7 +335,7 @@ void RecordTextReader::xfrSVCBValueList(vector &val) { d_pos += ctr; } -void RecordTextReader::xfrSvcParamKeyVals(set& val) +void RecordTextReader::xfrSvcParamKeyVals(set& val) // NOLINT(readability-function-cognitive-complexity) { while (d_pos != d_end) { skipSpaces(); @@ -469,7 +469,13 @@ void RecordTextReader::xfrSvcParamKeyVals(set& val) port = (v.at(0) << 8); port += v.at(1); } else { - xfr16BitInt(port); + string portstring; + xfrRFC1035CharString(portstring); + try { + pdns::checked_stoi_into(port, portstring); + } catch (const std::exception &e) { + throw RecordTextException(e.what()); + } } val.insert(SvcParam(key, port)); break; diff --git a/regression-tests.nobackend/tinydns-data-check/expected_result b/regression-tests.nobackend/tinydns-data-check/expected_result index 29e484430f..c65a7f4d26 100644 --- a/regression-tests.nobackend/tinydns-data-check/expected_result +++ b/regression-tests.nobackend/tinydns-data-check/expected_result @@ -1,4 +1,4 @@ -2ed2eb54a4cb3fd105aa78e6d4c99685 ../regression-tests/zones/example.com +f3e86fd522b08d4812505da489ecb5b0 ../regression-tests/zones/example.com f8f0d7b157495ec8ee70851e3d5cb65e ../regression-tests/zones/test.com e5e3ee998d151fe194b98997eaa36c53 ../regression-tests/zones/test.dyndns dee3e8b568549d9450134b555ca73990 ../regression-tests/zones/sub.test.dyndns @@ -15,5 +15,5 @@ a98864b315f16bcf49ce577426063c42 ../regression-tests/zones/cdnskey-cds-test.com 9aeed2c26d0c3ba3baf22dfa9568c451 ../regression-tests/zones/2.0.192.in-addr.arpa 99c73e8b5db5781fec1ac3fa6a2662a9 ../regression-tests/zones/cryptokeys.org 1f9e19be0cff67330f3a0a5347654f91 ../regression-tests/zones/hiddencryptokeys.org -e85d67cb577cf1de3127e439e7529311 ../modules/tinydnsbackend/data -7715e725358f969aa92e46ae9be0c464 ../modules/tinydnsbackend/data.cdb +16ca9f82f476f5910ed89830dc0f183b ../modules/tinydnsbackend/data +022f54332046eb386d636bd9141a4e77 ../modules/tinydnsbackend/data.cdb diff --git a/regression-tests/tests/svcb-servicemode/expected_result b/regression-tests/tests/svcb-servicemode/expected_result index c4a8c4303a..3956637ce2 100644 --- a/regression-tests/tests/svcb-servicemode/expected_result +++ b/regression-tests/tests/svcb-servicemode/expected_result @@ -1,5 +1,6 @@ 0 bar.svcb.example.com. 120 IN SVCB 1 . alpn=h2 0 bar.svcb.example.com. 120 IN SVCB 3 . alpn=h3 port=1500 +0 bar.svcb.example.com. 120 IN SVCB 4 . alpn=h3 port=1501 2 . 32768 IN OPT 2 bar.svcb.example.com. 120 IN A 192.0.2.1 2 bar.svcb.example.com. 120 IN AAAA 2001:db8::3:1 diff --git a/regression-tests/tests/svcb-servicemode/expected_result.dnssec b/regression-tests/tests/svcb-servicemode/expected_result.dnssec index 7920485fa5..666a28619e 100644 --- a/regression-tests/tests/svcb-servicemode/expected_result.dnssec +++ b/regression-tests/tests/svcb-servicemode/expected_result.dnssec @@ -1,6 +1,7 @@ 0 bar.svcb.example.com. 120 IN RRSIG SVCB 13 4 120 [expiry] [inception] [keytag] example.com. ... 0 bar.svcb.example.com. 120 IN SVCB 1 . alpn=h2 0 bar.svcb.example.com. 120 IN SVCB 3 . alpn=h3 port=1500 +0 bar.svcb.example.com. 120 IN SVCB 4 . alpn=h3 port=1501 2 . 32768 IN OPT 2 bar.svcb.example.com. 120 IN A 192.0.2.1 2 bar.svcb.example.com. 120 IN AAAA 2001:db8::3:1 diff --git a/regression-tests/zones/example.com b/regression-tests/zones/example.com index cd5657a853..96993cecb0 100644 --- a/regression-tests/zones/example.com +++ b/regression-tests/zones/example.com @@ -20222,6 +20222,7 @@ foo1.svcb IN A 192.0.2.2 ; Should show up in additional bar.svcb IN SVCB 1 . alpn=h2 bar.svcb IN SVCB 3 . alpn=h3 port=1500 +bar.svcb IN SVCB 4 . alpn=h3 port="1501" bar.svcb IN AAAA 2001:db8::3:1 bar.svcb IN AAAA 2001:db8::3:4 bar.svcb IN A 192.0.2.1