]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth: Wrap backend factories in smart pointers 14028/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 2 Apr 2024 14:05:51 +0000 (16:05 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 4 Apr 2024 08:29:14 +0000 (10:29 +0200)
16 files changed:
docs/appendices/backend-writers-guide.rst
modules/bindbackend/bindbackend2.cc
modules/geoipbackend/geoipbackend.cc
modules/gmysqlbackend/gmysqlbackend.cc
modules/godbcbackend/godbcbackend.cc
modules/gpgsqlbackend/gpgsqlbackend.cc
modules/gsqlite3backend/gsqlite3backend.cc
modules/ldapbackend/ldapbackend.cc
modules/lmdbbackend/lmdbbackend.cc
modules/lua2backend/lua2backend.cc
modules/pipebackend/pipebackend.cc
modules/remotebackend/remotebackend.cc
modules/tinydnsbackend/tinydnsbackend.cc
pdns/dnsbackend.cc
pdns/dnsbackend.hh
pdns/test-ueberbackend_cc.cc

index 1ee3046a95d40bbd820f156db15767c17b825951..6802169fad3d6a71a9f5187de376840706828d86 100644 (file)
@@ -217,7 +217,7 @@ furthermore, only about its A record:
     public:
       RandomLoader()
       {
-        BackendMakers().report(new RandomFactory);
+        BackendMakers().report(std::make_unique<RandomFactory>());
         g_log << Logger::Info << "[randombackend] This is the random backend version " VERSION " reporting" << endl;
       }
     };
index 013c9eb8ac7e7fb953c956ad4ab0a51d6965ff21..3c9b5409d7d61c2bbe824a402244140ff68e3482 100644 (file)
@@ -1535,7 +1535,7 @@ class Bind2Loader
 public:
   Bind2Loader()
   {
-    BackendMakers().report(new Bind2Factory);
+    BackendMakers().report(std::make_unique<Bind2Factory>());
     g_log << Logger::Info << "[bind2backend] This is the bind backend version " << VERSION
 #ifndef REPRODUCIBLE
           << " (" __DATE__ " " __TIME__ ")"
index 014aa24f0055782575d8ea03508deef91a0a867c..5d06d2f6cc4401b2fc319f3203f683b9aba50d4d 100644 (file)
@@ -1199,7 +1199,7 @@ class GeoIPLoader
 public:
   GeoIPLoader()
   {
-    BackendMakers().report(new GeoIPFactory);
+    BackendMakers().report(std::make_unique<GeoIPFactory>());
     g_log << Logger::Info << "[geoipbackend] This is the geoip backend version " VERSION
 #ifndef REPRODUCIBLE
           << " (" __DATE__ " " __TIME__ ")"
index 82f0f9d285b75e1b0069519a504f18350237d807..6ab5d9086ceb6cadd87a68ad26ec027052e42bd2 100644 (file)
@@ -184,7 +184,7 @@ public:
   //! This reports us to the main UeberBackend class
   gMySQLLoader()
   {
-    BackendMakers().report(new gMySQLFactory("gmysql"));
+    BackendMakers().report(std::make_unique<gMySQLFactory>("gmysql"));
     g_log << Logger::Info << "[gmysqlbackend] This is the gmysql backend version " VERSION
 #ifndef REPRODUCIBLE
           << " (" __DATE__ " " __TIME__ ")"
index 39b34510b17f58ccad8b20d55ab8bfaaa82ce257..d781a51404a84157d0e2450a11b45ac5eca0fc72 100644 (file)
@@ -169,7 +169,7 @@ public:
   //! This reports us to the main UeberBackend class
   gODBCLoader()
   {
-    BackendMakers().report(new gODBCFactory("godbc"));
+    BackendMakers().report(std::make_unique<gODBCFactory>("godbc"));
     g_log << Logger::Warning << "This is module godbcbackend reporting" << std::endl;
   }
 };
index 481ac8fd21b625baf454519abdec35730779e2cf..ea51b68c638afb5ec79d37116335233a2b966b56 100644 (file)
@@ -192,7 +192,7 @@ public:
   //! This reports us to the main UeberBackend class
   gPgSQLLoader()
   {
-    BackendMakers().report(new gPgSQLFactory("gpgsql"));
+    BackendMakers().report(std::make_unique<gPgSQLFactory>("gpgsql"));
     g_log << Logger::Info << "[gpgsqlbackend] This is the gpgsql backend version " VERSION
 #ifndef REPRODUCIBLE
           << " (" __DATE__ " " __TIME__ ")"
index f54491c8d4be9bf99922b165af87b93e8f6afec4..09ef25fb6b2175688134ad213c785d051d3b66aa 100644 (file)
@@ -179,7 +179,7 @@ public:
   //! This reports us to the main UeberBackend class
   gSQLite3Loader()
   {
-    BackendMakers().report(new gSQLite3Factory("gsqlite3"));
+    BackendMakers().report(std::make_unique<gSQLite3Factory>("gsqlite3"));
     g_log << Logger::Info << "[gsqlite3] This is the gsqlite3 backend version " VERSION
 #ifndef REPRODUCIBLE
           << " (" __DATE__ " " __TIME__ ")"
index f400559e70668f1f1ffb6c3e1e66c585df5b00bc..c1e91b692f4d65c63716284de219147dccfd39b2 100644 (file)
@@ -293,12 +293,10 @@ public:
 
 class LdapLoader
 {
-  LdapFactory factory;
-
 public:
   LdapLoader()
   {
-    BackendMakers().report(&factory);
+    BackendMakers().report(std::make_unique<LdapFactory>());
     g_log << Logger::Info << "[ldapbackend] This is the ldap backend version " VERSION
 #ifndef REPRODUCIBLE
           << " (" __DATE__ " " __TIME__ ")"
index 6038d989e000957619bff1e49a4b80c3ee64ca2f..2997e9911202223fb6559ccb8949de29156e434c 100644 (file)
@@ -2792,7 +2792,7 @@ class LMDBLoader
 public:
   LMDBLoader()
   {
-    BackendMakers().report(new LMDBFactory);
+    BackendMakers().report(std::make_unique<LMDBFactory>());
     g_log << Logger::Info << "[lmdbbackend] This is the lmdb backend version " VERSION
 #ifndef REPRODUCIBLE
           << " (" __DATE__ " " __TIME__ ")"
index 9a596e0ac15ad9528712fe9a169c09f562cfd685..a00f6c25eb17f61cd4575684a3c204c484ae2791 100644 (file)
@@ -62,7 +62,7 @@ class Lua2Loader
 public:
   Lua2Loader()
   {
-    BackendMakers().report(new Lua2Factory);
+    BackendMakers().report(std::make_unique<Lua2Factory>());
 
     g_log << Logger::Info << "[lua2backend] This is the lua2 backend version " VERSION
 #ifndef REPRODUCIBLE
index e79075a7f3845dc648498eb804ea6307291c7ba0..68173dc3a43e701c47f22b67e02aadf9e96a97fa 100644 (file)
@@ -379,7 +379,7 @@ class PipeLoader
 public:
   PipeLoader()
   {
-    BackendMakers().report(new PipeFactory);
+    BackendMakers().report(std::make_unique<PipeFactory>());
     g_log << Logger::Info << kBackendId << " This is the pipe backend version " VERSION
 #ifndef REPRODUCIBLE
           << " (" __DATE__ " " __TIME__ ")"
index 887d2b8f4a4eda72507da52564383b4b15b3a5cf..d4d68c97bf5b11218dcdd8fd0494b9cf4d43047d 100644 (file)
@@ -1007,7 +1007,7 @@ public:
 
 RemoteLoader::RemoteLoader()
 {
-  BackendMakers().report(new RemoteBackendFactory);
+  BackendMakers().report(std::make_unique<RemoteBackendFactory>());
   g_log << Logger::Info << kBackendId << " This is the remote backend version " VERSION
 #ifndef REPRODUCIBLE
         << " (" __DATE__ " " __TIME__ ")"
index 6ba897fb48f94b53d60e5050e56f045ab3e511ae..15c86b3c68db7bf16e420de2a3799d83c6bb2915 100644 (file)
@@ -393,7 +393,7 @@ class TinyDNSLoader
 public:
   TinyDNSLoader()
   {
-    BackendMakers().report(new TinyDNSFactory);
+    BackendMakers().report(std::make_unique<TinyDNSFactory>());
     g_log << Logger::Info << "[tinydnsbackend] This is the tinydns backend version " VERSION
 #ifndef REPRODUCIBLE
           << " (" __DATE__ " " __TIME__ ")"
index 8f45251a612164308a4ac848e2710231cc89c258..1aca03ce484258e474076eda5222988e324e83aa 100644 (file)
@@ -85,18 +85,14 @@ BackendMakerClass& BackendMakers()
   return bmc;
 }
 
-void BackendMakerClass::report(BackendFactory* backendFactory)
+void BackendMakerClass::report(std::unique_ptr<BackendFactory>&& backendFactory)
 {
-  d_repository[backendFactory->getName()] = backendFactory;
+  d_repository[backendFactory->getName()] = std::move(backendFactory);
 }
 
 void BackendMakerClass::clear()
 {
   d_instances.clear();
-  for (auto& repo : d_repository) {
-    delete repo.second;
-    repo.second = nullptr;
-  }
   d_repository.clear();
 }
 
@@ -199,7 +195,7 @@ vector<std::unique_ptr<DNSBackend>> BackendMakerClass::all(bool metadataOnly)
   try {
     for (const auto& instance : d_instances) {
       current = instance.first + instance.second;
-      auto* repo = d_repository[instance.first];
+      const auto& repo = d_repository[instance.first];
       std::unique_ptr<DNSBackend> made{metadataOnly ? repo->makeMetadataOnly(instance.second) : repo->make(instance.second)};
       if (made == nullptr) {
         throw PDNSException("Unable to launch backend '" + instance.first + "'");
index d79f851f732fac96b66ec87538020338cba452bc..7b7e4c211784f078cef053a85636bacc07afd592 100644 (file)
@@ -500,7 +500,7 @@ private:
 class BackendMakerClass
 {
 public:
-  void report(BackendFactory* backendFactory);
+  void report(std::unique_ptr<BackendFactory>&& backendFactory);
   void launch(const string& instr);
   vector<std::unique_ptr<DNSBackend>> all(bool metadataOnly = false);
   static void load(const string& module);
@@ -510,7 +510,7 @@ public:
 
 private:
   static void load_all();
-  using d_repository_t = map<string, BackendFactory*>;
+  using d_repository_t = map<string, std::unique_ptr<BackendFactory>>;
   d_repository_t d_repository;
   vector<pair<string, string>> d_instances;
 };
index b6a1cc3c12d22fe421b8c907ec76317dd0ec402b..5fc7d0d48ab9a74260b31baa2ccb215da0ab4d88 100644 (file)
@@ -467,7 +467,7 @@ BOOST_AUTO_TEST_CASE(test_simple) {
     zoneA.d_records->insert(SimpleBackend::SimpleDNSRecord(DNSName("geo.powerdns.com."), QType::A, "192.168.0.42", 60));
     SimpleBackend::s_zones[1].insert(zoneA);
 
-    BackendMakers().report(new SimpleBackendFactory());
+    BackendMakers().report(std::make_unique<SimpleBackendFactory>());
     BackendMakers().launch("SimpleBackend:1");
     UeberBackend::go();
 
@@ -580,7 +580,7 @@ BOOST_AUTO_TEST_CASE(test_multi_backends_separate_zones) {
     zoneB.d_records->insert(SimpleBackend::SimpleDNSRecord(DNSName("geo.powerdns.org."), QType::AAAA, "2001:db8::42", 60));
     SimpleBackend::s_zones[2].insert(zoneB);
 
-    BackendMakers().report(new SimpleBackendFactory());
+    BackendMakers().report(std::make_unique<SimpleBackendFactory>());
     BackendMakers().launch("SimpleBackend:1, SimpleBackend:2");
     UeberBackend::go();
 
@@ -725,7 +725,7 @@ BOOST_AUTO_TEST_CASE(test_multi_backends_overlay) {
     zoneB.d_records->insert(SimpleBackend::SimpleDNSRecord(DNSName("geo.powerdns.com."), QType::A, "192.168.0.42", 60));
     SimpleBackend::s_zones[2].insert(zoneB);
 
-    BackendMakers().report(new SimpleBackendFactory());
+    BackendMakers().report(std::make_unique<SimpleBackendFactory>());
     BackendMakers().launch("SimpleBackend:1, SimpleBackend:2");
     UeberBackend::go();
 
@@ -852,7 +852,7 @@ BOOST_AUTO_TEST_CASE(test_multi_backends_overlay_name) {
     zoneB.d_records->insert(SimpleBackend::SimpleDNSRecord(DNSName("geo.powerdns.com."), QType::A, "192.168.0.42", 60));
     SimpleBackend::s_zones[2].insert(zoneB);
 
-    BackendMakers().report(new SimpleBackendFactory());
+    BackendMakers().report(std::make_unique<SimpleBackendFactory>());
     BackendMakers().launch("SimpleBackend:1, SimpleBackend:2");
     UeberBackend::go();
 
@@ -976,7 +976,7 @@ BOOST_AUTO_TEST_CASE(test_child_zone) {
     zoneB.d_records->insert(SimpleBackend::SimpleDNSRecord(DNSName("ns1.powerdns.com."), QType::A, "192.0.2.1", 3600));
     SimpleBackend::s_zones[2].insert(zoneB);
 
-    BackendMakers().report(new SimpleBackendFactory());
+    BackendMakers().report(std::make_unique<SimpleBackendFactory>());
     BackendMakers().launch("SimpleBackend:1, SimpleBackend:2");
     UeberBackend::go();
 
@@ -1049,8 +1049,8 @@ BOOST_AUTO_TEST_CASE(test_multi_backends_best_soa) {
     zoneB.d_records->insert(SimpleBackend::SimpleDNSRecord(DNSName("0.1.0.0.2.ip6.arpa."), QType::SOA, "ns.apnic.net. read-txt-record-of-zone-first-dns-admin.apnic.net. 3005126844 7200 1800 604800 3600", 3600));
     SimpleBackend::s_zones[2].insert(zoneB);
 
-    BackendMakers().report(new SimpleBackendFactory());
-    BackendMakers().report(new SimpleBackendBestAuthFactory());
+    BackendMakers().report(std::make_unique<SimpleBackendFactory>());
+    BackendMakers().report(std::make_unique<SimpleBackendBestAuthFactory>());
     BackendMakers().launch("SimpleBackendBestAuth:1, SimpleBackend:2");
     UeberBackend::go();
 
@@ -1112,7 +1112,7 @@ BOOST_AUTO_TEST_CASE(test_multi_backends_metadata) {
     SimpleBackend::s_zones[2].insert(zoneB);
     SimpleBackend::s_metadata[2].insert(SimpleBackend::SimpleMetaData(DNSName("powerdns.org."), "test-data-b", { "value1", "value2"}));
 
-    BackendMakers().report(new SimpleBackendFactory());
+    BackendMakers().report(std::make_unique<SimpleBackendFactory>());
     BackendMakers().launch("SimpleBackend:1, SimpleBackend:2");
     UeberBackend::go();