From: Adam Stoler Date: Wed, 23 Mar 2022 19:08:38 +0000 (-0400) Subject: Rename echconfig SVCB parameter key to ech as per latest RFC draft, but maintain... X-Git-Tag: 1.8.2-rc.1~14^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F165%2Fhead;p=thirdparty%2Fldns.git Rename echconfig SVCB parameter key to ech as per latest RFC draft, but maintain compatibility of parsing echconfig as well Fix off-by-one error in ldns_rdf2buffer_str_svcparams --- diff --git a/host2str.c b/host2str.c index 634c5676..45b3f42d 100644 --- a/host2str.c +++ b/host2str.c @@ -1482,7 +1482,7 @@ svcparam_ipv4hint2buffer_str(ldns_buffer *output, size_t sz, uint8_t *data) } static ldns_status -svcparam_echconfig2buffer_str(ldns_buffer *output, size_t sz, uint8_t *data) +svcparam_ech2buffer_str(ldns_buffer *output, size_t sz, uint8_t *data) { size_t str_sz = ldns_b64_ntop_calculate_size(sz); int written; @@ -1561,7 +1561,7 @@ ldns_rdf2buffer_str_svcparams(ldns_buffer *output, const ldns_rdf *rdf) /* No svcparams is just fine. Just nothing to print. */ return LDNS_STATUS_OK; - for (dp = data; dp + 4 < data + sz; dp = next_dp) { + for (dp = data; dp + 4 <= data + sz; dp = next_dp) { ldns_svcparam_key key = ldns_read_uint16(dp); uint16_t val_sz = ldns_read_uint16(dp + 2); @@ -1593,8 +1593,8 @@ ldns_rdf2buffer_str_svcparams(ldns_buffer *output, const ldns_rdf *rdf) case LDNS_SVCPARAM_KEY_IPV4HINT: st = svcparam_ipv4hint2buffer_str(output, val_sz, dp); break; - case LDNS_SVCPARAM_KEY_ECHCONFIG: - st = svcparam_echconfig2buffer_str(output, val_sz, dp); + case LDNS_SVCPARAM_KEY_ECH: + st = svcparam_ech2buffer_str(output, val_sz, dp); break; case LDNS_SVCPARAM_KEY_IPV6HINT: st = svcparam_ipv6hint2buffer_str(output, val_sz, dp); diff --git a/ldns/rdata.h b/ldns/rdata.h index 470810e6..4a7dcb37 100644 --- a/ldns/rdata.h +++ b/ldns/rdata.h @@ -178,7 +178,7 @@ enum ldns_enum_svcparam_key LDNS_SVCPARAM_KEY_NO_DEFAULT_ALPN = 2, LDNS_SVCPARAM_KEY_PORT = 3, LDNS_SVCPARAM_KEY_IPV4HINT = 4, - LDNS_SVCPARAM_KEY_ECHCONFIG = 5, + LDNS_SVCPARAM_KEY_ECH = 5, LDNS_SVCPARAM_KEY_IPV6HINT = 6, LDNS_SVCPARAM_KEY_LAST_KEY = 6, LDNS_SVCPARAM_KEY_RESERVED = 65535 diff --git a/str2host.c b/str2host.c index b33101b0..0639d3f1 100644 --- a/str2host.c +++ b/str2host.c @@ -2076,7 +2076,7 @@ parse_svcparam_ipv4hint(const char **s, uint8_t **dp, uint8_t *eod) } static ldns_status -parse_svcparam_echconfig(const char **s, uint8_t **dp, uint8_t *eod) +parse_svcparam_ech(const char **s, uint8_t **dp, uint8_t *eod) { bool quoted = false; const char *b64_str; @@ -2188,7 +2188,7 @@ static svcparam_key_def svcparam_key_defs[] = { { "mandatory" , 9 } , { "no-default-alpn", 15 } , { "port" , 4 } , { "ipv4hint" , 8 } - , { "echconfig" , 9 } + , { "ech" , 3 } , { "ipv6hint" , 8 } }; static const size_t svcparam_key_defs_len = sizeof(svcparam_key_defs) @@ -2228,6 +2228,11 @@ parse_svcparam_key(const char **s, ldns_svcparam_key *key) return LDNS_STATUS_OK; } } + /* Also allow "echconfig" from earlier draft versions. */ + if (len == 9 && !strncmp(key_str, "echconfig", 9)) { + *key = LDNS_SVCPARAM_KEY_ECH; + return LDNS_STATUS_OK; + } if (len < 4 || len > 8 || strncmp(key_str, "key", 3)) return LDNS_STATUS_SYNTAX_SVCPARAM_KEY_ERR; @@ -2287,8 +2292,8 @@ parse_svcparam(const char **s, uint8_t **dp, uint8_t *eod) case LDNS_SVCPARAM_KEY_IPV4HINT: st = parse_svcparam_ipv4hint(s, dp, eod); break; - case LDNS_SVCPARAM_KEY_ECHCONFIG: - st = parse_svcparam_echconfig(s, dp, eod); + case LDNS_SVCPARAM_KEY_ECH: + st = parse_svcparam_ech(s, dp, eod); break; case LDNS_SVCPARAM_KEY_IPV6HINT: st = parse_svcparam_ipv6hint(s, dp, eod);