virtual bool setTSIGKey(const string& name, const string& algorithm, const string& content);
virtual bool deleteTSIGKey(const string& name);
virtual bool getTSIGKeys(std::vector< struct TSIGKey > &keys);
- static void createDNSSECDB(const string& fname);
+ virtual bool createDNSSECDB(const string& fname);
virtual bool doesDNSSEC();
// end of DNSSEC
}
void Bind2Backend::createDNSSECDB(const string& fname)
-{}
+{ return false; }
bool Bind2Backend::doesDNSSEC()
{ return false; }
d_dnssecdb->setLog(::arg().mustDo("query-logging"));
}
-void Bind2Backend::createDNSSECDB(const string& fname)
+bool Bind2Backend::createDNSSECDB(const string& fname)
{
try {
SSQLite3 db(fname, true); // create=ok
catch(SSqlException& se) {
throw PDNSException("Error creating database in BIND backend: "+se.txtReason());
}
+ return true;
}
bool Bind2Backend::doesDNSSEC()
virtual bool deleteTSIGKey(const string& name) { return false; }
virtual bool getTSIGKeys(std::vector< struct TSIGKey > &keys) { return false; }
+ virtual bool createDNSSECDB(const string& fname) { return false; }
+
virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& unhashed, std::string& before, std::string& after)
{
std::cerr<<"Default beforeAndAfterAbsolute called!"<<std::endl;
return -1;
}
-void loadMainConfig(const std::string& configdir)
+void loadMainConfig(const std::string& configdir, bool launchBind)
{
::arg().set("config-dir","Location of configuration directory (pdns.conf)")=configdir;
::arg().set("pipebackend-abi-version","Version of the pipe backend ABI")="1";
::arg().setSwitch("experimental-direct-dnskey","EXPERIMENTAL: fetch DNSKEY RRs from backend during DNSKEY synthesis")="no";
::arg().laxFile(configname.c_str());
- BackendMakers().launch(::arg()["launch"]); // vrooooom!
+ if (launchBind)
+ BackendMakers().launch("bind");
+ else
+ BackendMakers().launch(::arg()["launch"]); // vrooooom!
::arg().laxFile(configname.c_str());
//cerr<<"Backend: "<<::arg()["launch"]<<", '" << ::arg()["gmysql-dbname"] <<"'" <<endl;
return 0;
}
- loadMainConfig(g_vm["config-dir"].as<string>());
+ loadMainConfig(g_vm["config-dir"].as<string>(), cmds[0] == "create-bind-db");
reportAllTypes();
+ if(cmds[0] == "create-bind-db") {
+ if(cmds.size() != 2) {
+ cerr << "Syntax: pdnssec create-bind-db fname"<<endl;
+ return 0;
+ }
+ UeberBackend B("default");
+ if (!B.createDNSSECDB(cmds[1]))
+ return 1;
+ else
+ return 0;
+ }
+
DNSSECKeeper dk;
if (cmds[0] == "test-schema") {
return true;
}
+bool UeberBackend::createDNSSECDB(const string& fname)
+{
+ BOOST_FOREACH(DNSBackend* db, backends) {
+ db->createDNSSECDB(fname);
+ }
+ return true;
+}
void UeberBackend::reload()
{
bool deleteTSIGKey(const string& name);
bool getTSIGKeys(std::vector< struct TSIGKey > &keys);
+ bool createDNSSECDB(const string& fname);
+
void alsoNotifies(const string &domain, set<string> *ips);
void rediscover(string* status=0);
void reload();