]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
rec: cleanup in lwres related code
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Thu, 15 Jan 2026 13:04:06 +0000 (14:04 +0100)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Wed, 11 Feb 2026 14:11:26 +0000 (15:11 +0100)
Signed-off-by: Otto Moerbeek <otto.moerbeek@open-xchange.com>
pdns/recursordist/lwres.cc
pdns/recursordist/lwres.hh
pdns/recursordist/pdns_recursor.cc

index f0d1da14382553dd462240d19fdb77466c79db2a..f07744605519b3c07110467c32ea0df581533461 100644 (file)
@@ -704,7 +704,7 @@ static LWResult::Result asyncresolve(const OptLog& log, const ComboAddress& addr
   if (!doTCP) {
     int queryfd;
     try {
-      ret = asendto(vpacket.data(), vpacket.size(), 0, address, addressToBindTo, qid, domain, type, subnetOpts, &queryfd, *now);
+      ret = asendto(vpacket.data(), vpacket.size(), address, addressToBindTo, qid, domain, type, subnetOpts, &queryfd, *now);
     }
     catch (const PDNSException& e) {
       if (addressToBindTo) {
@@ -737,7 +737,7 @@ static LWResult::Result asyncresolve(const OptLog& log, const ComboAddress& addr
     }
 
     // sleep until we see an answer to this, interface to mtasker
-    ret = arecvfrom(buf, 0, address, len, qid, domain, type, queryfd, subnetOpts, *now);
+    ret = arecvfrom(buf, address, len, qid, domain, type, queryfd, subnetOpts, *now);
   }
   else {
     bool isNew{};
@@ -837,7 +837,10 @@ static LWResult::Result asyncresolve(const OptLog& log, const ComboAddress& addr
                         "onwire", Logging::Loggable(mdp.d_qname));
       }
       // unexpected count has already been done @ pdns_recursor.cc
-      goto out;
+      if (!lwr->d_rcode) {
+        lwr->d_rcode = RCode::ServFail;
+      }
+      return LWResult::Result::PermanentError;
     }
 
     lwr->d_records.reserve(mdp.d_answers.size());
@@ -947,7 +950,6 @@ static LWResult::Result asyncresolve(const OptLog& log, const ComboAddress& addr
 
   t_Counters.at(rec::Counter::serverParseError)++;
 
-out:
   if (!lwr->d_rcode) {
     lwr->d_rcode = RCode::ServFail;
   }
index 465b9735af7e530879e93cf73843dc9803c9d129..846751445870c142ac80d7c94c04dcdd6c42db42 100644 (file)
@@ -93,10 +93,10 @@ public:
 
 class EDNSSubnetOpts;
 
-LWResult::Result asendto(const void* data, size_t len, int flags, const ComboAddress& toAddress,
+LWResult::Result asendto(const void* data, size_t len, const ComboAddress& toAddress,
                          std::optional<ComboAddress>& localAddress, uint16_t qid,
                          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,
+LWResult::Result arecvfrom(PacketBuffer& packet, const ComboAddress& fromAddr, size_t& len, uint16_t qid,
                            const DNSName& domain, uint16_t qtype, int fileDesc, const std::optional<EDNSSubnetOpts>& ecs, const struct timeval& now);
 
 LWResult::Result asyncresolve(const OptLog& log, const ComboAddress& address, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, std::optional<Netmask>& srcmask, const ResolveContext& context, const std::shared_ptr<std::vector<std::unique_ptr<RemoteLogger>>>& outgoingLoggers, const std::shared_ptr<std::vector<std::unique_ptr<FrameStreamLogger>>>& fstrmLoggers, const std::set<uint16_t>& exportTypes, LWResult* lwr, bool* chained);
index 712e42be0699d598e469e3e9ead349f6434490ad..9c526c6f4fb9be09f2f5f50a756cdf9395de012a 100644 (file)
@@ -283,7 +283,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 */,
+LWResult::Result asendto(const void* data, size_t len,
                          const ComboAddress& toAddress, std::optional<ComboAddress>& localAddress, uint16_t qid, const DNSName& domain, uint16_t qtype, const std::optional<EDNSSubnetOpts>& ecs, int* fileDesc, timeval& now)
 {
 
@@ -334,10 +334,8 @@ LWResult::Result asendto(const void* data, size_t len, int /* flags */,
 
   t_fdm->addReadFD(*fileDesc, handleUDPServerResponse, pident);
   ssize_t sent = send(*fileDesc, data, len, 0);
-
-  int tmp = errno;
-
   if (sent < 0) {
+    int tmp = errno;
     t_udpclientsocks->returnSocket(*fileDesc);
     errno = tmp; // this is for logging purposes only
     return LWResult::Result::PermanentError;
@@ -348,7 +346,7 @@ LWResult::Result asendto(const void* data, size_t len, int /* flags */,
 
 static bool checkIncomingECSSource(const PacketBuffer& packet, const Netmask& subnet);
 
-LWResult::Result arecvfrom(PacketBuffer& packet, int /* flags */, const ComboAddress& fromAddr, size_t& len,
+LWResult::Result arecvfrom(PacketBuffer& packet, const ComboAddress& fromAddr, size_t& len,
                            uint16_t qid, const DNSName& domain, uint16_t qtype, int fileDesc, const std::optional<EDNSSubnetOpts>& ecs, const struct timeval& now)
 {
   static const unsigned int nearMissLimit = ::arg().asNum("spoof-nearmiss-max");