]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: if we can't append EDNS OPT RR, then indicate truncation to stub client 11993/head
authorLennart Poettering <lennart@poettering.net>
Wed, 13 Mar 2019 18:30:55 +0000 (19:30 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 13 Mar 2019 18:38:14 +0000 (19:38 +0100)
We do so for any other RR we can't add, do this here too.

Fixes: #11625
src/resolve/resolved-dns-stub.c

index 4549fe0c7256dc4d1c60131e93f4e2919a2c20ce..2bf04db4c57879350926277afa559d47bfb15c5d 100644 (file)
@@ -91,7 +91,14 @@ static int dns_stub_finish_reply_packet(
 
         assert(p);
 
-        if (!add_opt) {
+        if (add_opt) {
+                r = dns_packet_append_opt(p, ADVERTISE_DATAGRAM_SIZE_MAX, edns0_do, rcode, NULL);
+                if (r == -EMSGSIZE) /* Hit the size limit? then indicate truncation */
+                        tc = true;
+                else if (r < 0)
+                        return r;
+
+        } else {
                 /* If the client can't to EDNS0, don't do DO either */
                 edns0_do = false;
 
@@ -117,12 +124,6 @@ static int dns_stub_finish_reply_packet(
                                                               0  /* cd */,
                                                               rcode));
 
-        if (add_opt) {
-                r = dns_packet_append_opt(p, ADVERTISE_DATAGRAM_SIZE_MAX, edns0_do, rcode, NULL);
-                if (r < 0)
-                        return r;
-        }
-
         return 0;
 }