From d9a5574093280dc3f8aac6ac1fefe4888394f351 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 7 Jun 2023 12:23:25 +0200 Subject: [PATCH] resolved: add comment clarifying why we decompress DNS names when parsing SRV Fixes: #22838 --- src/resolve/resolved-dns-packet.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c index 574a1a4be92..d63760b7d1e 100644 --- a/src/resolve/resolved-dns-packet.c +++ b/src/resolve/resolved-dns-packet.c @@ -911,9 +911,9 @@ int dns_packet_append_rr(DnsPacket *p, const DnsResourceRecord *rr, const DnsAns if (r < 0) goto fail; - /* RFC 2782 states "Unless and until permitted by future standards - * action, name compression is not to be used for this field." */ - r = dns_packet_append_name(p, rr->srv.name, false, true, NULL); + /* RFC 2782 states "Unless and until permitted by future standards action, name compression + * is not to be used for this field." Hence we turn off compression here. */ + r = dns_packet_append_name(p, rr->srv.name, /* allow_compression= */ false, /* canonical_candidate= */ true, NULL); break; case DNS_TYPE_PTR: @@ -1728,7 +1728,13 @@ int dns_packet_read_rr( r = dns_packet_read_uint16(p, &rr->srv.port, NULL); if (r < 0) return r; - r = dns_packet_read_name(p, &rr->srv.name, true, NULL); + + /* RFC 2782 states "Unless and until permitted by future standards action, name compression + * is not to be used for this field." Nonetheless, we support it here, in the interest of + * increasing compatibility with implementations that do not implement this correctly. After + * all we didn't do this right once upon a time ourselves (see + * https://github.com/systemd/systemd/issues/9793). */ + r = dns_packet_read_name(p, &rr->srv.name, /* allow_compression= */ true, NULL); break; case DNS_TYPE_PTR: -- 2.47.3