]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Pass actual (optional) ecs instead of bool to asendto()
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Wed, 15 Jan 2025 11:21:07 +0000 (12:21 +0100)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Mon, 14 Jul 2025 07:10:08 +0000 (09:10 +0200)
pdns/recursordist/lwres.cc
pdns/recursordist/lwres.hh
pdns/recursordist/pdns_recursor.cc

index 00af5b02471e71ae00e0acc534042e8491c5bf12..2ecac1162d1d7f62e54c51ba9f5a8500d0cc3746 100644 (file)
@@ -423,14 +423,14 @@ static LWResult::Result asyncresolve(const ComboAddress& address, const DNSName&
   bool weWantEDNSSubnet = false;
   uint8_t outgoingECSBits = 0;
   ComboAddress outgoingECSAddr;
+  std::optional<EDNSSubnetOpts> subnetOpts = std::nullopt;
   if (EDNS0Level > 0) {
     DNSPacketWriter::optvect_t opts;
     if (srcmask) {
-      EDNSSubnetOpts subnetOpts;
-      subnetOpts.setSource(*srcmask);
+      subnetOpts->setSource(*srcmask);
       outgoingECSBits = srcmask->getBits();
       outgoingECSAddr = srcmask->getNetwork();
-      opts.emplace_back(EDNSOptionCode::ECS, subnetOpts.makeOptString());
+      opts.emplace_back(EDNSOptionCode::ECS, subnetOpts->makeOptString());
       weWantEDNSSubnet = true;
     }
 
@@ -476,7 +476,7 @@ static LWResult::Result asyncresolve(const ComboAddress& address, const DNSName&
   if (!doTCP) {
     int queryfd;
 
-    ret = asendto(vpacket.data(), vpacket.size(), 0, address, qid, domain, type, weWantEDNSSubnet, &queryfd, *now);
+    ret = asendto(vpacket.data(), vpacket.size(), 0, address, qid, domain, type, subnetOpts, &queryfd, *now);
 
     if (ret != LWResult::Result::Success) {
       return ret;
index 3b2bc43a1d0209b2f9fdae0f4a1b928319c06ffc..8b9e7321badebff84f65072d1e388f59be1bca72 100644 (file)
@@ -86,8 +86,10 @@ public:
   bool d_haveEDNS{false};
 };
 
+class EDNSSubnetOpts;
+
 LWResult::Result asendto(const void* data, size_t len, int flags, const ComboAddress& toAddress, uint16_t qid,
-                         const DNSName& domain, uint16_t qtype, bool ecs, int* fileDesc, timeval& now);
+                         const DNSName& domain, uint16_t qtype, const std::optional<EDNSSubnetOpts>& ecs, int* fileDesc, timeval& now);
 LWResult::Result arecvfrom(PacketBuffer& packet, int flags, const ComboAddress& fromAddr, size_t& len, uint16_t qid,
                            const DNSName& domain, uint16_t qtype, int fileDesc, const struct timeval& now);
 
index b842807d0ba5ffc092ebbdc6a5a8399bf8cb3292..5d30c4404de0f4363c00837fac47c39f1d81c4bb 100644 (file)
@@ -280,7 +280,7 @@ unsigned int authWaitTimeMSec(const std::unique_ptr<MT_t>& mtasker)
 
 /* these two functions are used by LWRes */
 LWResult::Result asendto(const void* data, size_t len, int /* flags */,
-                         const ComboAddress& toAddress, uint16_t qid, const DNSName& domain, uint16_t qtype, bool ecs, int* fileDesc, timeval& now)
+                         const ComboAddress& toAddress, uint16_t qid, const DNSName& domain, uint16_t qtype, const std::optional<EDNSSubnetOpts>& ecs, int* fileDesc, timeval& now)
 {
 
   auto pident = std::make_shared<PacketID>();