From: Christian Hofstaedtler Date: Fri, 20 Sep 2013 12:58:53 +0000 (+0200) Subject: introduce DNSBackend::createDomain X-Git-Tag: rec-3.6.0-rc1~428^2~7 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=487cf03309c94ab559afe1d9f2be13c7708b34bd;p=pdns introduce DNSBackend::createDomain Includes an implementation for GSQLBackend. --- diff --git a/modules/gmysqlbackend/gmysqlbackend.cc b/modules/gmysqlbackend/gmysqlbackend.cc index 25ca758c5..ce7ef2c13 100644 --- a/modules/gmysqlbackend/gmysqlbackend.cc +++ b/modules/gmysqlbackend/gmysqlbackend.cc @@ -87,6 +87,7 @@ public: 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')"); diff --git a/modules/godbcbackend/godbcbackend.cc b/modules/godbcbackend/godbcbackend.cc index be7b69ed3..225d2e10d 100644 --- a/modules/godbcbackend/godbcbackend.cc +++ b/modules/godbcbackend/godbcbackend.cc @@ -67,6 +67,7 @@ public: 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"); diff --git a/modules/goraclebackend/goraclebackend.cc b/modules/goraclebackend/goraclebackend.cc index d665f3c4e..e6f635dd6 100644 --- a/modules/goraclebackend/goraclebackend.cc +++ b/modules/goraclebackend/goraclebackend.cc @@ -91,6 +91,7 @@ public: 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')"); diff --git a/modules/gpgsqlbackend/gpgsqlbackend.cc b/modules/gpgsqlbackend/gpgsqlbackend.cc index 426bd818c..19ad18e8d 100644 --- a/modules/gpgsqlbackend/gpgsqlbackend.cc +++ b/modules/gpgsqlbackend/gpgsqlbackend.cc @@ -86,6 +86,7 @@ public: 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')"); diff --git a/modules/gsqlite3backend/gsqlite3backend.cc b/modules/gsqlite3backend/gsqlite3backend.cc index 8583ff25b..71400017e 100644 --- a/modules/gsqlite3backend/gsqlite3backend.cc +++ b/modules/gsqlite3backend/gsqlite3backend.cc @@ -105,6 +105,7 @@ public: 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')"); diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc index ddcfb9e30..e13d60050 100644 --- a/pdns/backends/gsql/gsqlbackend.cc +++ b/pdns/backends/gsql/gsqlbackend.cc @@ -273,6 +273,7 @@ GSQLBackend::GSQLBackend(const string &mode, const string &suffix) 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); @@ -876,6 +877,18 @@ bool GSQLBackend::superMasterBackend(const string &ip, const string &domain, con 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; @@ -886,7 +899,7 @@ bool GSQLBackend::createSlaveDomain(const string &ip, const string &domain, cons 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; } diff --git a/pdns/backends/gsql/gsqlbackend.hh b/pdns/backends/gsql/gsqlbackend.hh index 1e53a9893..142a5f34d 100644 --- a/pdns/backends/gsql/gsqlbackend.hh +++ b/pdns/backends/gsql/gsqlbackend.hh @@ -35,6 +35,7 @@ public: bool feedRecord(const DNSResourceRecord &r, string *ordername=0); bool feedEnts(int domain_id, set& nonterm); bool feedEnts3(int domain_id, const string &domain, set &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&nsset, string *account, DNSBackend **db); void setFresh(uint32_t domain_id); @@ -91,6 +92,7 @@ private: string d_InfoOfDomainsZoneQuery; string d_InfoOfAllSlaveDomainsQuery; string d_SuperMasterInfoQuery; + string d_InsertZoneQuery; string d_InsertSlaveZoneQuery; string d_InsertRecordQuery; string d_InsertEntQuery; diff --git a/pdns/dnsbackend.hh b/pdns/dnsbackend.hh index bb50c7c85..7759ff5a7 100644 --- a/pdns/dnsbackend.hh +++ b/pdns/dnsbackend.hh @@ -273,6 +273,12 @@ public: 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) { diff --git a/pdns/ueberbackend.cc b/pdns/ueberbackend.cc index 30e945dfa..7a1b596dd 100644 --- a/pdns/ueberbackend.cc +++ b/pdns/ueberbackend.cc @@ -103,6 +103,17 @@ bool UeberBackend::getDomainInfo(const string &domain, DomainInfo &di) 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; diff --git a/pdns/ueberbackend.hh b/pdns/ueberbackend.hh index d0ef671cb..980cd5729 100644 --- a/pdns/ueberbackend.hh +++ b/pdns/ueberbackend.hh @@ -123,6 +123,7 @@ public: void getUnfreshSlaveInfos(vector* domains); void getUpdatedMasters(vector* 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& keys);