From: Otto Moerbeek Date: Wed, 15 Jan 2025 11:21:07 +0000 (+0100) Subject: Pass actual (optional) ecs instead of bool to asendto() X-Git-Tag: rec-5.4.0-alpha0~18^2~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6a7d1901953cfbe4fd31a80fcbc7134a82970b7c;p=thirdparty%2Fpdns.git Pass actual (optional) ecs instead of bool to asendto() --- diff --git a/pdns/recursordist/lwres.cc b/pdns/recursordist/lwres.cc index 00af5b0247..2ecac1162d 100644 --- a/pdns/recursordist/lwres.cc +++ b/pdns/recursordist/lwres.cc @@ -423,14 +423,14 @@ static LWResult::Result asyncresolve(const ComboAddress& address, const DNSName& bool weWantEDNSSubnet = false; uint8_t outgoingECSBits = 0; ComboAddress outgoingECSAddr; + std::optional 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; diff --git a/pdns/recursordist/lwres.hh b/pdns/recursordist/lwres.hh index 3b2bc43a1d..8b9e7321ba 100644 --- a/pdns/recursordist/lwres.hh +++ b/pdns/recursordist/lwres.hh @@ -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& 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); diff --git a/pdns/recursordist/pdns_recursor.cc b/pdns/recursordist/pdns_recursor.cc index b842807d0b..5d30c4404d 100644 --- a/pdns/recursordist/pdns_recursor.cc +++ b/pdns/recursordist/pdns_recursor.cc @@ -280,7 +280,7 @@ unsigned int authWaitTimeMSec(const std::unique_ptr& 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& ecs, int* fileDesc, timeval& now) { auto pident = std::make_shared();