]> granicus.if.org Git - pdns/commitdiff
implement deleteDomain in GSQLBackend
authorChristian Hofstaedtler <christian@hofstaedtler.name>
Fri, 27 Sep 2013 16:03:54 +0000 (18:03 +0200)
committerChristian Hofstaedtler <christian@hofstaedtler.name>
Fri, 27 Sep 2013 16:05:44 +0000 (18:05 +0200)
modules/gmysqlbackend/gmysqlbackend.cc
modules/goraclebackend/goraclebackend.cc
modules/gpgsqlbackend/gpgsqlbackend.cc
modules/gsqlite3backend/gsqlite3backend.cc
pdns/backends/gsql/gsqlbackend.cc
pdns/backends/gsql/gsqlbackend.hh

index 06c3917e04dd3f1e68a2d7e78416b14dbefaed56..1d838d000dc0b245979e90b862b1a2a833209e9d 100644 (file)
@@ -112,16 +112,19 @@ public:
     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");
     declare(suffix,"info-all-master-query","", "select id,name,master,last_check,notified_serial,type from domains where type='MASTER'");
+    declare(suffix,"delete-domain-query","", "delete from domains where name='%s'");
     declare(suffix,"delete-zone-query","", "delete from records where domain_id=%d");
     declare(suffix,"delete-rrset-query","","delete from records where domain_id=%d and name='%s' and type='%s'");
     declare(suffix,"add-domain-key-query","", "insert into cryptokeys (domain_id, flags, active, content) select id, %d, %d, '%s' from domains where name='%s'");
     declare(suffix,"list-domain-keys-query","", "select cryptokeys.id, flags, active, content from domains, cryptokeys where cryptokeys.domain_id=domains.id and name='%s'");
     declare(suffix,"get-domain-metadata-query","", "select content from domains, domainmetadata where domainmetadata.domain_id=domains.id and name='%s' and domainmetadata.kind='%s'");
     declare(suffix,"clear-domain-metadata-query","", "delete from domainmetadata where domain_id=(select id from domains where name='%s') and domainmetadata.kind='%s'");
+    declare(suffix,"clear-domain-all-metadata-query","", "delete from domainmetadata where domain_id=(select id from domains where name='%s')");
     declare(suffix,"set-domain-metadata-query","", "insert into domainmetadata (domain_id, kind, content) select id, '%s', '%s' from domains where name='%s'");
     declare(suffix,"activate-domain-key-query","", "update cryptokeys set active=1 where domain_id=(select id from domains where name='%s') and  cryptokeys.id=%d");
     declare(suffix,"deactivate-domain-key-query","", "update cryptokeys set active=0 where domain_id=(select id from domains where name='%s') and  cryptokeys.id=%d");
     declare(suffix,"remove-domain-key-query","", "delete from cryptokeys where domain_id=(select id from domains where name='%s') and cryptokeys.id=%d");    
+    declare(suffix,"clear-domain-all-keys-query","", "delete from cryptokeys where domain_id=(select id from domains where name='%s')");
     declare(suffix,"get-tsig-key-query","", "select algorithm, secret from tsigkeys where name='%s'");
     declare(suffix,"set-tsig-key-query","", "replace into tsigkeys (name,algorithm,secret) values('%s','%s','%s')");
     declare(suffix,"delete-tsig-key-query","", "delete from tsigkeys where name='%s'");
index f96e60bfae4e32c824dc35fb145c5bd4b29d82ba..a0380b21d0d7dac15a8bdbbc20971a4f56e17cab 100644 (file)
@@ -111,16 +111,19 @@ public:
     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");
     declare(suffix,"info-all-master-query","", "select id,name,master,last_check,notified_serial,type from domains where type='MASTER'");
+    declare(suffix,"delete-domain-query","", "delete from domains where name='%s'");
     declare(suffix,"delete-zone-query","", "delete from records where domain_id=%d");
     declare(suffix,"delete-rrset-query","","delete from records where domain_id=%d and name='%s' and type='%s'");
     declare(suffix,"add-domain-key-query","", "insert into cryptokeys (id, domain_id, flags, active, content) select cryptokeys_id_sequence.nextval, id, %d, %d, '%s' from domains where name='%s'");
     declare(suffix,"list-domain-keys-query","", "select cryptokeys.id, flags, active, content from domains, cryptokeys where cryptokeys.domain_id=domains.id and name='%s'");
     declare(suffix,"get-domain-metadata-query","", "select content from domains, domainmetadata where domainmetadata.domain_id=domains.id and name='%s' and domainmetadata.kind='%s'");
     declare(suffix,"clear-domain-metadata-query","", "delete from domainmetadata where domain_id=(select id from domains where name='%s') and domainmetadata.kind='%s'");
+    declare(suffix,"clear-domain-all-metadata-query","", "delete from domainmetadata where domain_id=(select id from domains where name='%s')");
     declare(suffix,"set-domain-metadata-query","", "insert into domainmetadata (id, domain_id, kind, content) select domainmetadata_sequence_id.nextval, id, '%s', '%s' from domains where name='%s'");
     declare(suffix,"activate-domain-key-query","", "update cryptokeys set active=1 where domain_id=(select id from domains where name='%s') and  cryptokeys.id=%d");
     declare(suffix,"deactivate-domain-key-query","", "update cryptokeys set active=0 where domain_id=(select id from domains where name='%s') and  cryptokeys.id=%d");
     declare(suffix,"remove-domain-key-query","", "delete from cryptokeys where domain_id=(select id from domains where name='%s') and cryptokeys.id=%d");    
+    declare(suffix,"clear-domain-all-keys-query","", "delete from cryptokeys where domain_id=(select id from domains where name='%s')");
     declare(suffix,"get-tsig-key-query","", "select algorithm, secret from tsigkeys where name='%s'");
     declare(suffix,"set-tsig-key-query","", "insert into tsigkeys (name,algorithm,secret) VALUES('%s','%s','%s')");
     declare(suffix,"delete-tsig-key-query","", "delete from tsigkeys where name='%s'");
index 582cae1cd47cf9ffa233214e3e212ba276bf3c3f..1ae3c3ded79380b96cee72699a2aaadeeca5202e 100644 (file)
@@ -112,6 +112,7 @@ public:
     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");
     declare(suffix,"info-all-master-query","", "select id,name,master,last_check,notified_serial,type from domains where type='MASTER'");
+    declare(suffix,"delete-domain-query","", "delete from domains where name=E'%s'");
     declare(suffix,"delete-zone-query","", "delete from records where domain_id=%d");
     declare(suffix,"delete-rrset-query","","delete from records where domain_id=%d and name=E'%s' and type=E'%s'");
 
@@ -119,10 +120,12 @@ public:
     declare(suffix,"list-domain-keys-query","", "select cryptokeys.id, flags, case when active then 1 else 0 end as active, content from domains, cryptokeys where cryptokeys.domain_id=domains.id and name=E'%s'");
     declare(suffix,"get-domain-metadata-query","", "select content from domains, domainmetadata where domainmetadata.domain_id=domains.id and name=E'%s' and domainmetadata.kind=E'%s'");
     declare(suffix,"clear-domain-metadata-query","", "delete from domainmetadata where domain_id=(select id from domains where name=E'%s') and domainmetadata.kind=E'%s'");
+    declare(suffix,"clear-domain-all-metadata-query","", "delete from domainmetadata where domain_id=(select id from domains where name=E'%s')");
     declare(suffix,"set-domain-metadata-query","", "insert into domainmetadata (domain_id, kind, content) select id, '%s', '%s' from domains where name=E'%s'");
     declare(suffix,"activate-domain-key-query","", "update cryptokeys set active=true where domain_id=(select id from domains where name=E'%s') and  cryptokeys.id=%d");
     declare(suffix,"deactivate-domain-key-query","", "update cryptokeys set active=false where domain_id=(select id from domains where name=E'%s') and  cryptokeys.id=%d");
     declare(suffix,"remove-domain-key-query","", "delete from cryptokeys where domain_id=(select id from domains where name=E'%s') and cryptokeys.id=%d");    
+    declare(suffix,"clear-domain-all-keys-query","", "delete from cryptokeys where domain_id=(select id from domains where name=E'%s')");
     declare(suffix,"get-tsig-key-query","", "select algorithm, secret from tsigkeys where name=E'%s'");
     declare(suffix,"set-tsig-key-query","", "insert into tsigkeys (name,algorithm,secret) values('%s','%s','%s')");
     declare(suffix,"delete-tsig-key-query","", "delete from tsigkeys where name='%s'");
index ae88be3359a8123c0bd265b05b0bd7a4cc2804dc..1113f619a5aa1b7c380e184ef2c51bc0d0061a1f 100644 (file)
@@ -121,6 +121,7 @@ public:
     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");
     declare( suffix, "info-all-master-query", "", "select id,name,master,last_check,notified_serial,type from domains where type='MASTER'");
+    declare(suffix,"delete-domain-query","", "delete from domains where name='%s'");
     declare( suffix, "delete-zone-query", "", "delete from records where domain_id=%d");
     declare( suffix, "delete-rrset-query", "", "delete from records where domain_id = %d and name='%s' and type='%s'");
     declare(suffix, "dnssec", "Assume DNSSEC Schema is in place","no");
@@ -129,10 +130,12 @@ public:
     declare(suffix,"list-domain-keys-query","", "select cryptokeys.id, flags, active, content from domains, cryptokeys where cryptokeys.domain_id=domains.id and name='%s'");
     declare(suffix,"get-domain-metadata-query","", "select content from domains, domainmetadata where domainmetadata.domain_id=domains.id and name='%s' and domainmetadata.kind='%s'");
     declare(suffix,"clear-domain-metadata-query","", "delete from domainmetadata where domain_id=(select id from domains where name='%s') and domainmetadata.kind='%s'");
+    declare(suffix,"clear-domain-all-metadata-query","", "delete from domainmetadata where domain_id=(select id from domains where name='%s')");
     declare(suffix,"set-domain-metadata-query","", "insert into domainmetadata (domain_id, kind, content) select id, '%s', '%s' from domains where name='%s'");
     declare(suffix,"activate-domain-key-query","", "update cryptokeys set active=1 where domain_id=(select id from domains where name='%s') and  cryptokeys.id=%d");
     declare(suffix,"deactivate-domain-key-query","", "update cryptokeys set active=0 where domain_id=(select id from domains where name='%s') and  cryptokeys.id=%d");
     declare(suffix,"remove-domain-key-query","", "delete from cryptokeys where domain_id=(select id from domains where name='%s') and cryptokeys.id=%d");
+    declare(suffix,"clear-domain-all-keys-query","", "delete from cryptokeys where domain_id=(select id from domains where name='%s')");
     declare(suffix,"get-tsig-key-query","", "select algorithm, secret from tsigkeys where name='%s'");
     declare(suffix,"set-tsig-key-query","", "replace into tsigkeys (name,algorithm,secret) values('%s','%s','%s')");
     declare(suffix,"delete-tsig-key-query","", "delete from tsigkeys where name='%s'");
index d9c8c4a5751d7644f602998aee76fb1655a46eaf..339afcb4aa4885d4888768e5a40fb7f9af439510 100644 (file)
@@ -305,6 +305,7 @@ GSQLBackend::GSQLBackend(const string &mode, const string &suffix)
   d_UpdateLastCheckofZoneQuery=getArg("update-lastcheck-query");
   d_ZoneLastChangeQuery=getArg("zone-lastchange-query");
   d_InfoOfAllMasterDomainsQuery=getArg("info-all-master-query");
+  d_DeleteDomainQuery=getArg("delete-domain-query");
   d_DeleteZoneQuery=getArg("delete-zone-query");
   d_DeleteRRSet=getArg("delete-rrset-query");
   d_getAllDomainsQuery=getArg("get-all-domains-query");
@@ -329,14 +330,17 @@ GSQLBackend::GSQLBackend(const string &mode, const string &suffix)
     
     d_AddDomainKeyQuery = getArg("add-domain-key-query");
     d_ListDomainKeysQuery = getArg("list-domain-keys-query");
+    d_ClearDomainAllKeysQuery = getArg("clear-domain-all-keys-query");
     
     d_GetDomainMetadataQuery = getArg("get-domain-metadata-query");
     d_ClearDomainMetadataQuery = getArg("clear-domain-metadata-query");
+    d_ClearDomainAllMetadataQuery = getArg("clear-domain-all-metadata-query");
     d_SetDomainMetadataQuery = getArg("set-domain-metadata-query");
     
     d_ActivateDomainKeyQuery = getArg("activate-domain-key-query");
     d_DeactivateDomainKeyQuery = getArg("deactivate-domain-key-query");
     d_RemoveDomainKeyQuery = getArg("remove-domain-key-query");
+    d_ClearDomainAllKeysQuery = getArg("clear-domain-all-keys-query");
     
     d_getTSIGKeyQuery = getArg("get-tsig-key-query");
     d_setTSIGKeyQuery = getArg("set-tsig-key-query");
@@ -778,7 +782,6 @@ bool GSQLBackend::setDomainMetadata(const string& name, const std::string& kind,
   return true;
 }
 
-
 void GSQLBackend::lookup(const QType &qtype,const string &qname, DNSPacket *pkt_p, int domain_id)
 {
   string format;
@@ -928,6 +931,39 @@ bool GSQLBackend::createSlaveDomain(const string &ip, const string &domain, cons
   return true;
 }
 
+bool GSQLBackend::deleteDomain(const string &domain)
+{
+  string sqlDomain = sqlEscape(toLower(domain));
+
+  DomainInfo di;
+  if (!getDomainInfo(domain, di)) {
+    return false;
+  }
+
+  string recordsQuery = (boost::format(d_DeleteZoneQuery) % di.id).str();
+  string metadataQuery;
+  string keysQuery;
+  string domainQuery = (boost::format(d_DeleteDomainQuery) % sqlDomain).str();
+
+  if (d_dnssecQueries) {
+    metadataQuery = (boost::format(d_ClearDomainAllMetadataQuery) % sqlDomain).str();
+    keysQuery = (boost::format(d_ClearDomainAllKeysQuery) % sqlDomain).str();
+  }
+
+  try {
+    d_db->doCommand(recordsQuery);
+    if (d_dnssecQueries) {
+      d_db->doCommand(metadataQuery);
+      d_db->doCommand(keysQuery);
+    }
+    d_db->doCommand(domainQuery);
+  }
+  catch(SSqlException &e) {
+    throw PDNSException("Database error trying to delete domain '"+domain+"': "+ e.txtReason());
+  }
+  return true;
+}
+
 void GSQLBackend::getAllDomains(vector<DomainInfo> *domains) 
 {
   DLOG(L<<"GSQLBackend retrieving all domains."<<endl);
index 2405db9b4522a303125915d6d5327d4dbd7e1090..3986ef9b8e1dac7c3eff043ae2aeaf53a96aacba 100644 (file)
@@ -37,6 +37,7 @@ public:
   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 deleteDomain(const string &domain);
   bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **db);
   void setFresh(uint32_t domain_id);
   void getUnfreshSlaveInfos(vector<DomainInfo> *domains);
@@ -63,6 +64,7 @@ public:
   bool getDomainKeys(const string& name, unsigned int kind, std::vector<KeyData>& keys);
   bool getDomainMetadata(const string& name, const std::string& kind, std::vector<std::string>& meta);
   bool setDomainMetadata(const string& name, const std::string& kind, const std::vector<std::string>& meta);
+  bool clearDomainAllMetadata(const string& domain);
   
   bool removeDomainKey(const string& name, unsigned int id);
   bool activateDomainKey(const string& name, unsigned int id);
@@ -106,7 +108,8 @@ private:
   string d_UpdateSerialOfZoneQuery;
   string d_UpdateLastCheckofZoneQuery;
   string d_InfoOfAllMasterDomainsQuery;
-  string d_DeleteZoneQuery;            
+  string d_DeleteDomainQuery;
+  string d_DeleteZoneQuery;
   string d_DeleteRRSet;
   string d_ZoneLastChangeQuery;
   
@@ -127,11 +130,13 @@ private:
   string d_ListDomainKeysQuery;
   string d_GetDomainMetadataQuery;
   string d_ClearDomainMetadataQuery;
+  string d_ClearDomainAllMetadataQuery;
   string d_SetDomainMetadataQuery;
 
   string d_RemoveDomainKeyQuery;
   string d_ActivateDomainKeyQuery;
   string d_DeactivateDomainKeyQuery;
+  string d_ClearDomainAllKeysQuery;
   
   string d_getTSIGKeyQuery;
   string d_setTSIGKeyQuery;