]> granicus.if.org Git - pdns/commitdiff
implement setMaster/setKind in GSQLBackend
authorChristian Hofstaedtler <christian@hofstaedtler.name>
Fri, 27 Sep 2013 12:55:50 +0000 (14:55 +0200)
committerChristian Hofstaedtler <christian@hofstaedtler.name>
Fri, 27 Sep 2013 16:05:44 +0000 (18:05 +0200)
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

index ce7ef2c13ca6ddac3a35c861bc478abf72335cb9..06c3917e04dd3f1e68a2d7e78416b14dbefaed56 100644 (file)
@@ -106,6 +106,8 @@ public:
     declare(suffix,"nullify-ordername-and-auth-query", "DNSSEC nullify ordername and auth query", "update records set ordername=NULL,auth=0 where name='%s' and type='%s' and domain_id='%d'");
     declare(suffix,"set-auth-on-ds-record-query", "DNSSEC set auth on a DS record", "update records set auth=1 where domain_id='%d' and name='%s' and type='DS'");
 
+    declare(suffix,"update-master-query","", "update domains set master='%s' where name='%s'");
+    declare(suffix,"update-kind-query","", "update domains set type='%s' where name='%s'");
     declare(suffix,"update-serial-query","", "update domains set notified_serial=%d where id=%d");
     declare(suffix,"update-lastcheck-query","", "update domains set last_check=%d where id=%d");
     declare(suffix,"zone-lastchange-query", "", "select max(change_date) from records where domain_id=%d");
index 225d2e10d8cd87ded49d134963393ab9b33ce709..22435070e4e156ce2213987e71b3d10df89bb401 100644 (file)
@@ -70,6 +70,8 @@ public:
     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-master-query", "", "update domains set master='%s' where name='%s'");
+    declare( suffix, "update-kind-query", "", "update domains set type='%s' where name='%s'");
     declare( suffix, "update-serial-query", "", "update domains set notified_serial=%d where id=%d");
     declare( suffix, "update-lastcheck-query", "", "update domains set last_check=%d where id=%d");
     declare( suffix, "info-all-master-query", "", "select id,name,master,last_check,notified_serial,type from domains where type='MASTER'");
index e6f635dd6d3d03af7a169a47e60522c21c458372..f96e60bfae4e32c824dc35fb145c5bd4b29d82ba 100644 (file)
@@ -105,6 +105,8 @@ public:
     declare(suffix,"nullify-ordername-and-auth-query", "DNSSEC nullify ordername and auth query", "update records set ordername=NULL,auth=0 where name='%s' and type='%s' and domain_id='%d'");
     declare(suffix,"set-auth-on-ds-record-query", "DNSSEC set auth on a DS record", "update records set auth=1 where domain_id='%d' and name='%s' and type='DS'");
 
+    declare(suffix,"update-master-query","", "update domains set master='%s' where name='%s'");
+    declare(suffix,"update-kind-query","", "update domains set type='%s' where name='%s'");
     declare(suffix,"update-serial-query","", "update domains set notified_serial=%d where id=%d");
     declare(suffix,"update-lastcheck-query","", "update domains set last_check=%d where id=%d");
     declare(suffix,"zone-lastchange-query", "", "select max(change_date) from records where domain_id=%d");
index 19ad18e8dbfe9f17efc653106d6cf0f16c1d34d4..582cae1cd47cf9ffa233214e3e212ba276bf3c3f 100644 (file)
@@ -106,6 +106,8 @@ public:
     declare(suffix,"nullify-ordername-and-update-auth-query", "DNSSEC nullify ordername and update auth query", "update records set ordername=NULL,auth=%d::bool where domain_id='%d' and name='%s'");
     declare(suffix,"nullify-ordername-and-auth-query", "DNSSEC nullify ordername and auth query", "update records set ordername=NULL,auth=false where name=E'%s' and type=E'%s' and domain_id='%d'");
     
+    declare(suffix,"update-master-query","", "update domains set master='%s' where name='%s'");
+    declare(suffix,"update-kind-query","", "update domains set type='%s' where name='%s'");
     declare(suffix,"update-serial-query","", "update domains set notified_serial=%d where id=%d");
     declare(suffix,"update-lastcheck-query","", "update domains set last_check=%d where id=%d");
     declare(suffix,"zone-lastchange-query", "", "select max(change_date) from records where domain_id=%d");
index 71400017e92585b792d7bca9c3b5ebd08278633d..ae88be3359a8123c0bd265b05b0bd7a4cc2804dc 100644 (file)
@@ -115,6 +115,8 @@ public:
     declare( suffix, "insert-ent-query-auth", "insert empty non-terminal in zone", "insert into records (type,domain_id,name,auth) values (null,'%d','%s','1')");
     declare( suffix, "insert-ent-order-query-auth", "insert empty non-terminal in zone", "insert into records (type,domain_id,name,ordername,auth) values (null,'%d','%s','%s','1')");
 
+    declare( suffix, "update-master-query", "", "update domains set master='%s' where name='%s'");
+    declare( suffix, "update-kind-query", "", "update domains set type='%s' where name='%s'");
     declare( suffix, "update-serial-query", "", "update domains set notified_serial=%d where id=%d");
     declare( suffix, "update-lastcheck-query", "", "update domains set last_check=%d where id=%d");
     declare (suffix, "zone-lastchange-query", "", "select max(change_date) from records where domain_id=%d");
index 1c62dd2c0a120f8abf6b9f2b00e91646237e19b6..d9c8c4a5751d7644f602998aee76fb1655a46eaf 100644 (file)
@@ -105,6 +105,33 @@ bool GSQLBackend::isMaster(const string &domain, const string &ip)
   return 0;  
 }
 
+bool GSQLBackend::setMaster(const string &domain, const string &ip)
+{
+  string query = (boost::format(d_UpdateMasterOfZoneQuery) % sqlEscape(ip) % sqlEscape(toLower(domain))).str();
+
+  try {
+    d_db->doCommand(query);
+  }
+  catch (SSqlException &e) {
+    throw PDNSException("GSQLBackend unable to set master of domain \""+domain+"\": "+e.txtReason());
+  }
+  return true;
+}
+
+bool GSQLBackend::setKind(const string &domain, const DomainInfo::DomainKind kind)
+{
+  string kind_str = toUpper(DomainInfo::getKindString(kind));
+  string query = (boost::format(d_UpdateKindOfZoneQuery) % sqlEscape(kind_str) % sqlEscape(toLower(domain))).str();
+
+  try {
+    d_db->doCommand(query);
+  }
+  catch (SSqlException &e) {
+    throw PDNSException("GSQLBackend unable to set kind of domain \""+domain+"\": "+e.txtReason());
+  }
+  return true;
+}
+
 bool GSQLBackend::getDomainInfo(const string &domain, DomainInfo &di)
 {
   /* fill DomainInfo from database info:
@@ -272,6 +299,8 @@ GSQLBackend::GSQLBackend(const string &mode, const string &suffix)
   d_InsertSlaveZoneQuery=getArg("insert-slave-query");
   d_InsertRecordQuery=getArg("insert-record-query"+authswitch);
   d_InsertEntQuery=getArg("insert-ent-query"+authswitch);
+  d_UpdateMasterOfZoneQuery=getArg("update-master-query");
+  d_UpdateKindOfZoneQuery=getArg("update-kind-query");
   d_UpdateSerialOfZoneQuery=getArg("update-serial-query");
   d_UpdateLastCheckofZoneQuery=getArg("update-lastcheck-query");
   d_ZoneLastChangeQuery=getArg("zone-lastchange-query");
index 142a5f34d1ff518108ac4481c110112b330c4bea..2405db9b4522a303125915d6d5327d4dbd7e1090 100644 (file)
@@ -43,6 +43,9 @@ public:
   void getUpdatedMasters(vector<DomainInfo> *updatedDomains);
   bool getDomainInfo(const string &domain, DomainInfo &di);
   void setNotified(uint32_t domain_id, uint32_t serial);
+  bool setMaster(const string &domain, const string &ip);
+  bool setKind(const string &domain, const DomainInfo::DomainKind kind);
+
   virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& unhashed, std::string& before, std::string& after);
   bool updateDNSSECOrderAndAuth(uint32_t domain_id, const std::string& zonename, const std::string& qname, bool auth);
   virtual bool updateDNSSECOrderAndAuthAbsolute(uint32_t domain_id, const std::string& qname, const std::string& ordername, bool auth);
@@ -98,6 +101,8 @@ private:
   string d_InsertEntQuery;
   string d_InsertRecordOrderQuery;
   string d_InsertEntOrderQuery;
+  string d_UpdateMasterOfZoneQuery;
+  string d_UpdateKindOfZoneQuery;
   string d_UpdateSerialOfZoneQuery;
   string d_UpdateLastCheckofZoneQuery;
   string d_InfoOfAllMasterDomainsQuery;