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;
}
};
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__ ")"
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__ ")"
//! 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__ ")"
//! 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;
}
};
//! 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__ ")"
//! 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__ ")"
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__ ")"
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__ ")"
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
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__ ")"
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__ ")"
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__ ")"
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();
}
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 + "'");
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);
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;
};
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();
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();
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();
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();
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();
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();
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();