]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
chore(dnsdist): move restoreFlags to dnsdist::PacketMangling
authorPieter Lexis <pieter.lexis@powerdns.com>
Wed, 22 Oct 2025 16:08:56 +0000 (18:08 +0200)
committerPieter Lexis <pieter.lexis@powerdns.com>
Mon, 1 Jun 2026 10:52:27 +0000 (12:52 +0200)
pdns/dnsdistdist/dnsdist-dnsparser.cc
pdns/dnsdistdist/dnsdist-dnsparser.hh
pdns/dnsdistdist/dnsdist.cc

index 4fe07e36428fff4d38073aae5e5f9dd87924a98b..bafbda570cd7f819e7b2b3c3fa983a29adf89c8a 100644 (file)
@@ -248,6 +248,19 @@ namespace PacketMangling
     editDNSPacketTTL(reinterpret_cast<char*>(packet.data()), packet.size(), visitor);
   }
 
+  void restoreFlags(struct dnsheader* dnsHeader, uint16_t origFlags)
+  {
+    static const uint16_t rdMask = 1 << FLAGS_RD_OFFSET;
+    static const uint16_t cdMask = 1 << FLAGS_CD_OFFSET;
+    static const uint16_t restoreFlagsMask = UINT16_MAX & ~(rdMask | cdMask);
+    uint16_t* flags = getFlagsFromDNSHeader(dnsHeader);
+    /* clear the flags we are about to restore */
+    *flags &= restoreFlagsMask;
+    /* only keep the flags we want to restore */
+    origFlags &= ~restoreFlagsMask;
+    /* set the saved flags as they were */
+    *flags |= origFlags;
+  }
 }
 
 namespace RecordParsers
index 88a93b47e99a2b569870363ade41118670475fee..943bba0ce32db18e9e31dcfa5f2fa1bb859ea5ee 100644 (file)
@@ -61,6 +61,7 @@ namespace PacketMangling
   bool editDNSHeaderFromPacket(PacketBuffer& packet, const std::function<bool(dnsheader& header)>& editFunction);
   bool editDNSHeaderFromRawPacket(void* packet, const std::function<bool(dnsheader& header)>& editFunction);
   void restrictDNSPacketTTLs(PacketBuffer& packet, uint32_t minimumValue, uint32_t maximumValue = std::numeric_limits<uint32_t>::max(), const std::unordered_set<QType>& types = {});
+  void restoreFlags(struct dnsheader* dnsHeader, uint16_t origFlags);
 }
 
 namespace RecordParsers
index 16eaba147cc706d922d975a5db758701cc0ed9de..c84a51574e0ea44ff1029510bc990153eda56584 100644 (file)
@@ -252,24 +252,10 @@ bool responseContentMatches(const PacketBuffer& response, const DNSName& qname,
   }
 }
 
-static void restoreFlags(struct dnsheader* dnsHeader, uint16_t origFlags)
-{
-  static const uint16_t rdMask = 1 << FLAGS_RD_OFFSET;
-  static const uint16_t cdMask = 1 << FLAGS_CD_OFFSET;
-  static const uint16_t restoreFlagsMask = UINT16_MAX & ~(rdMask | cdMask);
-  uint16_t* flags = getFlagsFromDNSHeader(dnsHeader);
-  /* clear the flags we are about to restore */
-  *flags &= restoreFlagsMask;
-  /* only keep the flags we want to restore */
-  origFlags &= ~restoreFlagsMask;
-  /* set the saved flags as they were */
-  *flags |= origFlags;
-}
-
 static bool fixUpQueryTurnedResponse(DNSQuestion& dnsQuestion, const uint16_t origFlags)
 {
   dnsdist::PacketMangling::editDNSHeaderFromPacket(dnsQuestion.getMutableData(), [origFlags](dnsheader& header) {
-    restoreFlags(&header, origFlags);
+    dnsdist::PacketMangling::restoreFlags(&header, origFlags);
     return true;
   });
 
@@ -286,7 +272,7 @@ static bool fixUpResponse(PacketBuffer& response, const DNSName& qname, uint16_t
   }
 
   dnsdist::PacketMangling::editDNSHeaderFromPacket(response, [origFlags](dnsheader& header) {
-    restoreFlags(&header, origFlags);
+    dnsdist::PacketMangling::restoreFlags(&header, origFlags);
     return true;
   });
 
@@ -1531,7 +1517,7 @@ ProcessQueryResult processQueryAfterRules(DNSQuestion& dnsQuestion, std::shared_
       if (serverPool.packetCache->get(dnsQuestion, dnsQuestion.getHeader()->id, dnsQuestion.ids.protocol == dnsdist::Protocol::DoH ? &dnsQuestion.ids.cacheKeyTCP : &dnsQuestion.ids.cacheKey, dnsQuestion.ids.subnet, *dnsQuestion.ids.dnssecOK, dnsQuestion.ids.protocol != dnsdist::Protocol::DoH && willBeForwardedOverUDP, allowExpired, false, true, dnsQuestion.ids.protocol != dnsdist::Protocol::DoH || !willBeForwardedOverUDP)) {
 
         dnsdist::PacketMangling::editDNSHeaderFromPacket(dnsQuestion.getMutableData(), [flags = dnsQuestion.ids.origFlags](dnsheader& header) {
-          restoreFlags(&header, flags);
+          dnsdist::PacketMangling::restoreFlags(&header, flags);
           return true;
         });
 
@@ -1638,7 +1624,7 @@ bool handleTimeoutResponseRules(const std::vector<dnsdist::rules::ResponseRuleAc
   dnsdist::PacketMangling::editDNSHeaderFromPacket(payload, [&ids](dnsheader& header) {
     memset(&header, 0, sizeof(header));
     header.id = ids.origID;
-    restoreFlags(&header, ids.origFlags);
+    dnsdist::PacketMangling::restoreFlags(&header, ids.origFlags);
     // set QR=1 since this is a response rule
     header.qr = 1;
     // do not set the qdcount, otherwise the protobuf code will choke on it