From: Lennart Poettering Date: Thu, 7 Jan 2016 11:42:48 +0000 (+0100) Subject: resolved: be less strict where the OPT pseudo-RR is placed X-Git-Tag: v229~151^2~35 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=35b011ed7c108b3e3c67f641afdf75ca6c5a621e;p=thirdparty%2Fsystemd.git resolved: be less strict where the OPT pseudo-RR is placed This increases compatibility with crappy Belkin routers. --- diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c index 4750bf1f5db..8a360a29fbe 100644 --- a/src/resolve/resolved-dns-packet.c +++ b/src/resolve/resolved-dns-packet.c @@ -2089,11 +2089,12 @@ int dns_packet_extract(DnsPacket *p) { goto finish; } - /* The OPT RR is only valid in the Additional section */ - if (i < DNS_PACKET_ANCOUNT(p) + DNS_PACKET_NSCOUNT(p)) { - r = -EBADMSG; - goto finish; - } + /* Note that we accept the OPT RR in + * any section, not just in the + * additional section, as some routers + * (Belkin!) blindly copy the OPT RR + * from the query to the reply packet, + * and don't get the section right. */ /* Two OPT RRs? */ if (p->opt) {