]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Reduce the dependency on dnsdist::configuration.hh
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 21 Jun 2024 09:04:02 +0000 (11:04 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 15 Jul 2024 09:47:58 +0000 (11:47 +0200)
Getting rid of the ugly DNSQuestion stubs in the meantime.

pdns/dnsdistdist/Makefile.am
pdns/dnsdistdist/dnsdist-dnsquestion.cc [new file with mode: 0644]
pdns/dnsdistdist/dnsdist.cc
pdns/dnsdistdist/dnsdist.hh
pdns/dnsdistdist/test-dnsdist-lua-ffi.cc
pdns/dnsdistdist/test-dnsdistlbpolicies_cc.cc

index 19e57742ee291f3ca3d23d8e9037a4e6a4beb345..93db389654754f544ede94a4bd9067771c67e575 100644 (file)
@@ -156,6 +156,7 @@ dnsdist_SOURCES = \
        dnsdist-discovery.cc dnsdist-discovery.hh \
        dnsdist-dnscrypt.cc \
        dnsdist-dnsparser.cc dnsdist-dnsparser.hh \
+       dnsdist-dnsquestion.cc \
        dnsdist-doh-common.cc dnsdist-doh-common.hh \
        dnsdist-downstream-connection.hh \
        dnsdist-dynblocks.cc dnsdist-dynblocks.hh \
@@ -280,6 +281,7 @@ testrunner_SOURCES = \
        dnsdist-configuration.cc dnsdist-configuration.hh \
        dnsdist-crypto.cc dnsdist-crypto.hh \
        dnsdist-dnsparser.cc dnsdist-dnsparser.hh \
+       dnsdist-dnsquestion.cc \
        dnsdist-doh-common.cc dnsdist-doh-common.hh \
        dnsdist-downstream-connection.hh \
        dnsdist-dynblocks.cc dnsdist-dynblocks.hh \
@@ -554,6 +556,7 @@ fuzz_target_dnsdistcache_SOURCES = \
        dnsdist-cache.cc dnsdist-cache.hh \
        dnsdist-configuration.cc dnsdist-configuration.hh \
        dnsdist-dnsparser.cc dnsdist-dnsparser.hh \
+       dnsdist-dnsquestion.cc \
        dnsdist-ecs.cc dnsdist-ecs.hh \
        dnsdist-idstate.hh \
        dnsdist-protocols.cc dnsdist-protocols.hh \
diff --git a/pdns/dnsdistdist/dnsdist-dnsquestion.cc b/pdns/dnsdistdist/dnsdist-dnsquestion.cc
new file mode 100644 (file)
index 0000000..7090f56
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * This file is part of PowerDNS or dnsdist.
+ * Copyright -- PowerDNS.COM B.V. and its contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * In addition, for the avoidance of any doubt, permission is granted to
+ * link this program with OpenSSL and to (re)distribute the binaries
+ * produced as the result of such linking.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+#include "dnsdist.hh"
+#include "dnsdist-dnsparser.hh"
+
+std::string DNSQuestion::getTrailingData() const
+{
+  // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
+  const auto* message = reinterpret_cast<const char*>(this->getData().data());
+  const uint16_t messageLen = getDNSPacketLength(message, this->getData().size());
+  // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
+  return {message + messageLen, this->getData().size() - messageLen};
+}
+
+bool DNSQuestion::setTrailingData(const std::string& tail)
+{
+  // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
+  const char* message = reinterpret_cast<const char*>(this->data.data());
+  const uint16_t messageLen = getDNSPacketLength(message, this->data.size());
+  this->data.resize(messageLen);
+  if (!tail.empty()) {
+    if (!hasRoomFor(tail.size())) {
+      return false;
+    }
+    this->data.insert(this->data.end(), tail.begin(), tail.end());
+  }
+  return true;
+}
+
+bool DNSQuestion::editHeader(const std::function<bool(dnsheader&)>& editFunction)
+{
+  if (data.size() < sizeof(dnsheader)) {
+    throw std::runtime_error("Trying to access the dnsheader of a too small (" + std::to_string(data.size()) + ") DNSQuestion buffer");
+  }
+  return dnsdist::PacketMangling::editDNSHeaderFromPacket(data, editFunction);
+}
+
+DNSQuestion::DNSQuestion(InternalQueryState& ids_, PacketBuffer& data_) :
+  data(data_), ids(ids_), ecsPrefixLength(ids.origRemote.sin4.sin_family == AF_INET ? dnsdist::configuration::getCurrentRuntimeConfiguration().d_ECSSourcePrefixV4 : dnsdist::configuration::getCurrentRuntimeConfiguration().d_ECSSourcePrefixV6), ecsOverride(dnsdist::configuration::getCurrentRuntimeConfiguration().d_ecsOverride)
+{
+}
index 036911857c9b89675f6c770045abac929c805a50..e91b5f9b0866833d13ea8f3f289794590e2d61d8 100644 (file)
@@ -46,7 +46,6 @@
 #include "dnsdist-console.hh"
 #include "dnsdist-crypto.hh"
 #include "dnsdist-discovery.hh"
-#include "dnsdist-dnsparser.hh"
 #include "dnsdist-dynblocks.hh"
 #include "dnsdist-ecs.hh"
 #include "dnsdist-edns.hh"
@@ -72,7 +71,6 @@
 #include "doh.hh"
 #include "dolog.hh"
 #include "dnsname.hh"
-#include "dnsparser.hh"
 #include "ednsoptions.hh"
 #include "gettime.hh"
 #include "lock.hh"
@@ -188,38 +186,6 @@ struct DelayedPacket
 static std::unique_ptr<DelayPipe<DelayedPacket>> g_delay{nullptr};
 #endif /* DISABLE_DELAY_PIPE */
 
-std::string DNSQuestion::getTrailingData() const
-{
-  // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
-  const auto* message = reinterpret_cast<const char*>(this->getData().data());
-  const uint16_t messageLen = getDNSPacketLength(message, this->getData().size());
-  // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
-  return {message + messageLen, this->getData().size() - messageLen};
-}
-
-bool DNSQuestion::setTrailingData(const std::string& tail)
-{
-  // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
-  const char* message = reinterpret_cast<const char*>(this->data.data());
-  const uint16_t messageLen = getDNSPacketLength(message, this->data.size());
-  this->data.resize(messageLen);
-  if (!tail.empty()) {
-    if (!hasRoomFor(tail.size())) {
-      return false;
-    }
-    this->data.insert(this->data.end(), tail.begin(), tail.end());
-  }
-  return true;
-}
-
-bool DNSQuestion::editHeader(const std::function<bool(dnsheader&)>& editFunction)
-{
-  if (data.size() < sizeof(dnsheader)) {
-    throw std::runtime_error("Trying to access the dnsheader of a too small (" + std::to_string(data.size()) + ") DNSQuestion buffer");
-  }
-  return dnsdist::PacketMangling::editDNSHeaderFromPacket(data, editFunction);
-}
-
 static void doLatencyStats(dnsdist::Protocol protocol, double udiff)
 {
   constexpr auto doAvg = [](double& var, double n, double weight) {
index 378cd764158e7104ee861801cacb9bbe5ce40460..9a4fc0ca1a11dbb8332ca534dfe6da30ca3b89c6 100644 (file)
@@ -38,7 +38,6 @@
 #include "circular_buffer.hh"
 #include "dnscrypt.hh"
 #include "dnsdist-cache.hh"
-#include "dnsdist-configuration.hh"
 #include "dnsdist-dynbpf.hh"
 #include "dnsdist-idstate.hh"
 #include "dnsdist-lbpolicies.hh"
@@ -67,10 +66,7 @@ struct ClientState;
 
 struct DNSQuestion
 {
-  DNSQuestion(InternalQueryState& ids_, PacketBuffer& data_) :
-    data(data_), ids(ids_), ecsPrefixLength(ids.origRemote.sin4.sin_family == AF_INET ? dnsdist::configuration::getCurrentRuntimeConfiguration().d_ECSSourcePrefixV4 : dnsdist::configuration::getCurrentRuntimeConfiguration().d_ECSSourcePrefixV6), ecsOverride(dnsdist::configuration::getCurrentRuntimeConfiguration().d_ecsOverride)
-  {
-  }
+  DNSQuestion(InternalQueryState& ids_, PacketBuffer& data_);
   DNSQuestion(const DNSQuestion&) = delete;
   DNSQuestion& operator=(const DNSQuestion&) = delete;
   DNSQuestion(DNSQuestion&&) = default;
index efd21e8d36284ba29c18d389b2700843bd570e7f..c53009705126a2b319470982d034115b44557ddf 100644 (file)
@@ -250,14 +250,11 @@ BOOST_AUTO_TEST_CASE(test_Query)
 
   {
     BOOST_CHECK_EQUAL(dnsdist_ffi_dnsquestion_get_trailing_data(&lightDQ, nullptr), 0U);
-#if 0
-    // DNSQuestion::setTrailingData() and DNSQuestion::getTrailingData() are currently stubs in the test runner
     std::string garbage("thisissomegarbagetrailingdata");
     BOOST_CHECK_EQUAL(dnsdist_ffi_dnsquestion_set_trailing_data(&lightDQ, garbage.data(), garbage.size()), true);
     const char* buffer = nullptr;
     BOOST_REQUIRE_EQUAL(dnsdist_ffi_dnsquestion_get_trailing_data(&lightDQ, &buffer), garbage.size());
     BOOST_CHECK_EQUAL(garbage, std::string(buffer));
-#endif
   }
 
   {
index abe9a95c9e6e3a2937c367a0f4994e4d353c48ea..1eb819e49131099342de236845972a976d2e714e 100644 (file)
@@ -32,18 +32,6 @@ bool TLSFrontend::setupTLS()
   return true;
 }
 
-// NOLINTNEXTLINE(readability-convert-member-functions-to-static): this is a stub, the real one is not that simple..
-std::string DNSQuestion::getTrailingData() const
-{
-  return "";
-}
-
-// NOLINTNEXTLINE(readability-convert-member-functions-to-static): this is a stub, the real one is not that simple..
-bool DNSQuestion::setTrailingData(const std::string& tail)
-{
-  return false;
-}
-
 // NOLINTNEXTLINE(readability-convert-member-functions-to-static): this is a stub, the real one is not that simple..
 bool DNSDistSNMPAgent::sendDNSTrap(const DNSQuestion& dnsQuestion, const std::string& reason)
 {