Yes, I think that sentence should be changed.  I’d suggest removing the 
"malformed SvcParamValues” part, but others may disagree.

I agree that a URL is a tricky case.  The spec writer might not want to include 
an ABNF representation of a valid URL, because implementors would likely want 
to use existing facilities to parse URLs, which are likely not consistent.  In 
that case, though, I would expect the spec to indicate that the field is a 
bytestring, and the resolver to be able to that.  The fact that it’s a URL is 
something that the client should be checking.

For the existing parameters, there are checks that can (and should) be made; 
that IPv4 addresses, IPv6 addresses, and ports are of appropriate length, that 
the ALPN field has the right length prefix, and that the mandatory field is 
ordered and has a valid length.

There are also checks which are not specified, and which a client may want to 
do, but are not part of the record format itself.  I wouldn’t expect a 
recursive resolver to reject a record containing an ipv4hint with the address 
255.255.255.255, but that doesn’t mean that a client should try to connect to 
it.

I do not think that it should be required that a resolver is able to convey 
malformed records, where malformed is (only) referring to the syntactic 
content.  That’s not how resolvers work for other types; no resolvers have 
options to allow 5 byte A records.

Brian


On Apr 21, 2021, at 10:00 AM, Ben Schwartz 
<bemasc=40google....@dmarc.ietf.org<mailto:bemasc=40google....@dmarc.ietf.org>> 
wrote:

On Wed, Apr 21, 2021 at 12:44 PM Wellington, Brian 
<bwelling=40akamai....@dmarc.ietf.org<mailto:40akamai....@dmarc.ietf.org>> 
wrote:
I’m not a fan of the new text in section 4.3:

Recursive resolvers MUST be able to convey SVCB records with unrecognized 
SvcParamKeys or malformed SvcParamValues.

It is perfectly reasonable for a recursive resolver to reject any malformed DNS 
record.  There’s a significant difference between “malformed” and “unknown”.  A 
recursive resolver should definitely allow records with unknown SvcParamKeys, 
but if the format of a record is known, a resolver should be allowed 
(encouraged, in fact) to check that it conforms to that format.

The concern here was about differing interpretations of future standards.  For 
example, if some SvcParamValue is defined as a URL (for some future key), 
implementations are likely to disagree about whether certain bytestrings are 
valid URLs.  (There are several definitions and a zillion edge cases.)  The 
resolver has no use for these values, so the most compatible behavior is to 
treat them as opaque bytestrings.

We very deliberately chose the phrase "MUST be able to convey" to recognize 
that resolvers might be configured not to convey a record with a malformed 
value, but it should be possible.

Do you think we should change this sentence?

_______________________________________________
DNSOP mailing list
DNSOP@ietf.org
https://www.ietf.org/mailman/listinfo/dnsop

Reply via email to