]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Do not replace EDNS in answers self-generated from a packet
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 27 May 2025 14:23:39 +0000 (16:23 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 6 Jun 2025 14:05:17 +0000 (16:05 +0200)
While it makes sense to add/remove EDNS when the answer was generated
from the query itself, we should not be doing that when it has been
generated from a whole DNS packet, as it probably contains exactly
what the user intended it to.

Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
pdns/dnsdistdist/dnsdist-self-answers.cc
pdns/dnsdistdist/dnsdist.cc
pdns/dnsdistdist/dnsdist.hh

index dd0ff0b119ec7c7b2e6a779324fbb56790f67220..4e0b66084e52c3f82e835e3e33be497b09cec30c 100644 (file)
@@ -233,6 +233,7 @@ bool generateAnswerFromRawPacket(DNSQuestion& dnsQuestion, const PacketBuffer& p
 {
   auto questionId = dnsQuestion.getHeader()->id;
   dnsQuestion.getMutableData() = packet;
+  dnsQuestion.d_selfGeneratedFromPacket = true;
   dnsdist::PacketMangling::editDNSHeaderFromPacket(dnsQuestion.getMutableData(), [questionId](dnsheader& header) {
     header.id = questionId;
     return true;
index 4c9d5967244bf8b8c118db49648d938056c2a984..b96617e0a570cced41ec7e8928e09d8ff63c7e54 100644 (file)
@@ -326,6 +326,9 @@ static bool fixUpQueryTurnedResponse(DNSQuestion& dnsQuestion, const uint16_t or
     return true;
   });
 
+  if (dnsQuestion.d_selfGeneratedFromPacket) {
+    return true;
+  }
   return addEDNSToQueryTurnedResponse(dnsQuestion);
 }
 
index 6624e86a45214cde2e122bd68ed820fa46b78e60..06b32ade6fec14f4cdd8efcd6e44ceefadba622f 100644 (file)
@@ -184,6 +184,7 @@ public:
   bool ecsOverride;
   bool useECS{true};
   bool asynchronous{false};
+  bool d_selfGeneratedFromPacket{false};
 };
 
 struct DownstreamState;