Includes an implementation for GSQLBackend.
declare(suffix,"info-all-slaves-query","","select id,name,master,last_check,type from domains where type='SLAVE'");
declare(suffix,"supermaster-query","", "select account from supermasters where ip='%s' and nameserver='%s'");
+ declare(suffix,"insert-zone-query","", "insert into domains (type,name) values('NATIVE','%s')");
declare(suffix,"insert-slave-query","", "insert into domains (type,name,master,account) values('SLAVE','%s','%s','%s')");
declare(suffix,"insert-record-query","", "insert into records (content,ttl,prio,type,domain_id,name) values ('%s',%d,%d,'%s',%d,'%s')");
declare( suffix, "info-all-slaves-query", "","select id,name,master,last_check,type from domains where type='SLAVE'");
declare( suffix, "supermaster-query", "", "select account from supermasters where ip='%s' and nameserver='%s'");
+ declare( suffix, "insert-zone-query", "", "insert into domains (type,name) values('NATIVE','%s')");
declare( suffix, "insert-slave-query", "", "insert into domains (type,name,master,account) values('SLAVE','%s','%s','%s')");
declare( suffix, "insert-record-query", "", "insert into records (content,ttl,prio,type,domain_id,name) values ('%s',%d,%d,'%s',%d,'%s')");
declare( suffix, "update-serial-query", "", "update domains set notified_serial=%d where id=%d");
declare(suffix,"info-all-slaves-query","","select id,name,master,last_check,type from domains where type='SLAVE'");
declare(suffix,"supermaster-query","", "select account from supermasters where ip='%s' and nameserver='%s'");
+ declare(suffix,"insert-zone-query","", "insert into domains (id, type, name) values(domain_id_sequence.nextval, 'NATIVE','%s')");
declare(suffix,"insert-slave-query","", "insert into domains (id, type,name,master,account) values(domain_id_sequence.nextval, 'SLAVE','%s','%s','%s')");
declare(suffix,"insert-record-query","", "insert into records (id, content,ttl,prio,type,domain_id,name) values (records_id_sequence.nextval, '%s',%d,%d,'%s',%d,'%s')");
declare(suffix,"insert-record-query-auth","", "insert into records (id, content,ttl,prio,type,domain_id,name,auth) values (records_id_sequence.nextval, '%s',%d,%d,'%s',%d,'%s','%d')");
declare(suffix,"info-all-slaves-query","","select id,name,master,last_check,type from domains where type='SLAVE'");
declare(suffix,"supermaster-query","", "select account from supermasters where ip='%s' and nameserver=E'%s'");
+ declare(suffix,"insert-zone-query","", "insert into domains (type,name) values('NATIVE',E'%s')");
declare(suffix,"insert-slave-query","", "insert into domains (type,name,master,account) values('SLAVE',E'%s',E'%s',E'%s')");
declare(suffix,"insert-record-query","", "insert into records (content,ttl,prio,type,domain_id,name) values (E'%s',%d,%d,'%s',%d,E'%s')");
declare( suffix, "info-all-slaves-query", "","select id,name,master,last_check,type from domains where type='SLAVE'");
declare( suffix, "supermaster-query", "", "select account from supermasters where ip='%s' and nameserver='%s'");
+ declare( suffix, "insert-zone-query", "", "insert into domains (type,name) values('NATIVE','%s')");
declare( suffix, "insert-slave-query", "", "insert into domains (type,name,master,account) values('SLAVE','%s','%s','%s')");
declare( suffix, "insert-record-query", "", "insert into records (content,ttl,prio,type,domain_id,name) values ('%s',%d,%d,'%s',%d,'%s')");
d_InfoOfDomainsZoneQuery=getArg("info-zone-query");
d_InfoOfAllSlaveDomainsQuery=getArg("info-all-slaves-query");
d_SuperMasterInfoQuery=getArg("supermaster-query");
+ d_InsertZoneQuery=getArg("insert-zone-query");
d_InsertSlaveZoneQuery=getArg("insert-slave-query");
d_InsertRecordQuery=getArg("insert-record-query"+authswitch);
d_InsertEntQuery=getArg("insert-ent-query"+authswitch);
return false;
}
+bool GSQLBackend::createDomain(const string &domain)
+{
+ string query = (boost::format(d_InsertZoneQuery) % toLower(sqlEscape(domain))).str();
+ try {
+ d_db->doCommand(query);
+ }
+ catch(SSqlException &e) {
+ throw PDNSException("Database error trying to insert new domain '"+domain+"': "+ e.txtReason());
+ }
+ return true;
+}
+
bool GSQLBackend::createSlaveDomain(const string &ip, const string &domain, const string &account)
{
string format;
d_db->doCommand(output);
}
catch(SSqlException &e) {
- throw PDNSException("Database error trying to insert new slave '"+domain+"': "+ e.txtReason());
+ throw PDNSException("Database error trying to insert new slave domain '"+domain+"': "+ e.txtReason());
}
return true;
}
bool feedRecord(const DNSResourceRecord &r, string *ordername=0);
bool feedEnts(int domain_id, set<string>& nonterm);
bool feedEnts3(int domain_id, const string &domain, set<string> &nonterm, unsigned int times, const string &salt, bool narrow);
+ bool createDomain(const string &domain);
bool createSlaveDomain(const string &ip, const string &domain, const string &account);
bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **db);
void setFresh(uint32_t domain_id);
string d_InfoOfDomainsZoneQuery;
string d_InfoOfAllSlaveDomainsQuery;
string d_SuperMasterInfoQuery;
+ string d_InsertZoneQuery;
string d_InsertSlaveZoneQuery;
string d_InsertRecordQuery;
string d_InsertEntQuery;
return false;
}
+ //! called by PowerDNS to create a new domain
+ virtual bool createDomain(const string &domain)
+ {
+ return false;
+ }
+
//! called by PowerDNS to create a slave record for a superMaster
virtual bool createSlaveDomain(const string &ip, const string &domain, const string &account)
{
return false;
}
+bool UeberBackend::createDomain(const string &domain, DNSBackend** db)
+{
+ BOOST_FOREACH(DNSBackend* mydb, backends) {
+ if(mydb->createDomain(domain)) {
+ *db = mydb;
+ return true;
+ }
+ }
+ return false;
+}
+
int UeberBackend::addDomainKey(const string& name, const KeyData& key)
{
int ret;
void getUnfreshSlaveInfos(vector<DomainInfo>* domains);
void getUpdatedMasters(vector<DomainInfo>* domains);
bool getDomainInfo(const string &domain, DomainInfo &di);
+ bool createDomain(const string &domain, DNSBackend** db);
int addDomainKey(const string& name, const KeyData& key);
bool getDomainKeys(const string& name, unsigned int kind, std::vector<KeyData>& keys);