]> granicus.if.org Git - pdns/commitdiff
introduce DNSBackend::createDomain
authorChristian Hofstaedtler <christian@hofstaedtler.name>
Fri, 20 Sep 2013 12:58:53 +0000 (14:58 +0200)
committerChristian Hofstaedtler <christian@hofstaedtler.name>
Fri, 27 Sep 2013 16:05:44 +0000 (18:05 +0200)
Includes an implementation for GSQLBackend.

modules/gmysqlbackend/gmysqlbackend.cc
modules/godbcbackend/godbcbackend.cc
modules/goraclebackend/goraclebackend.cc
modules/gpgsqlbackend/gpgsqlbackend.cc
modules/gsqlite3backend/gsqlite3backend.cc
pdns/backends/gsql/gsqlbackend.cc
pdns/backends/gsql/gsqlbackend.hh
pdns/dnsbackend.hh
pdns/ueberbackend.cc
pdns/ueberbackend.hh

index 25ca758c5eb238304bb0ed3766d7a87e402bb1f8..ce7ef2c13ca6ddac3a35c861bc478abf72335cb9 100644 (file)
@@ -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')");
index be7b69ed3b698c124f74f0917591da83b633d1ef..225d2e10d8cd87ded49d134963393ab9b33ce709 100644 (file)
@@ -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");
index d665f3c4e912eef88816a55dc745cc188f40e067..e6f635dd6d3d03af7a169a47e60522c21c458372 100644 (file)
@@ -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')");
index 426bd818cf2cfd39408b7434dcac8b7ae209dab4..19ad18e8dbfe9f17efc653106d6cf0f16c1d34d4 100644 (file)
@@ -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')");
index 8583ff25be407adb9a1c0bcf1987ac9f612af063..71400017e92585b792d7bca9c3b5ebd08278633d 100644 (file)
@@ -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')");
index ddcfb9e30b829070d3bea2144f522eada7aa8d11..e13d60050f286c81941b7c40e59eb4338db9cebf 100644 (file)
@@ -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;
 }
index 1e53a98933c8b226fa5be3035cb94bccdc2b93f8..142a5f34d1ff518108ac4481c110112b330c4bea 100644 (file)
@@ -35,6 +35,7 @@ public:
   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);
@@ -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;
index bb50c7c856dce4d889f63d2023ef0530e1731716..7759ff5a7dd18e4b8d8243f05a2690d766c2ef03 100644 (file)
@@ -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)
   {
index 30e945dfa655cf2f7da9803b3edca669a162a253..7a1b596dd4b59c90bd620fad7b5c66e4597778dc 100644 (file)
@@ -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;
index d0ef671cbc108f824754433d69dc1ba35d6c089b..980cd57295a3d7ffe38a1edb21d0ef4c058d456c 100644 (file)
@@ -123,6 +123,7 @@ public:
   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);