diff options
author | Lennart Poettering <lennart@poettering.net> | 2016-01-07 12:42:48 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2016-01-11 19:39:58 +0100 |
commit | 35b011ed7c108b3e3c67f641afdf75ca6c5a621e (patch) | |
tree | de34fa9d803ddca6c8735135774eacee7a299cb9 | |
parent | 7e35195fe3240b5c325dcf4d74621ec87a5d2b55 (diff) |
resolved: be less strict where the OPT pseudo-RR is placed
This increases compatibility with crappy Belkin routers.
-rw-r--r-- | src/resolve/resolved-dns-packet.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c index 4750bf1f5d..8a360a29fb 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) { |