From: Christian Hofstaedtler Date: Fri, 27 Sep 2013 16:03:54 +0000 (+0200) Subject: implement deleteDomain in GSQLBackend X-Git-Tag: rec-3.6.0-rc1~428^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=09d6667a68dfeb85720e0a6d0749add2a97e9edb;p=pdns implement deleteDomain in GSQLBackend --- diff --git a/modules/gmysqlbackend/gmysqlbackend.cc b/modules/gmysqlbackend/gmysqlbackend.cc index 06c3917e0..1d838d000 100644 --- a/modules/gmysqlbackend/gmysqlbackend.cc +++ b/modules/gmysqlbackend/gmysqlbackend.cc @@ -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'"); diff --git a/modules/goraclebackend/goraclebackend.cc b/modules/goraclebackend/goraclebackend.cc index f96e60bfa..a0380b21d 100644 --- a/modules/goraclebackend/goraclebackend.cc +++ b/modules/goraclebackend/goraclebackend.cc @@ -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'"); diff --git a/modules/gpgsqlbackend/gpgsqlbackend.cc b/modules/gpgsqlbackend/gpgsqlbackend.cc index 582cae1cd..1ae3c3ded 100644 --- a/modules/gpgsqlbackend/gpgsqlbackend.cc +++ b/modules/gpgsqlbackend/gpgsqlbackend.cc @@ -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'"); diff --git a/modules/gsqlite3backend/gsqlite3backend.cc b/modules/gsqlite3backend/gsqlite3backend.cc index ae88be335..1113f619a 100644 --- a/modules/gsqlite3backend/gsqlite3backend.cc +++ b/modules/gsqlite3backend/gsqlite3backend.cc @@ -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'"); diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc index d9c8c4a57..339afcb4a 100644 --- a/pdns/backends/gsql/gsqlbackend.cc +++ b/pdns/backends/gsql/gsqlbackend.cc @@ -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 *domains) { DLOG(L<<"GSQLBackend retrieving all domains."< &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&nsset, string *account, DNSBackend **db); void setFresh(uint32_t domain_id); void getUnfreshSlaveInfos(vector *domains); @@ -63,6 +64,7 @@ public: bool getDomainKeys(const string& name, unsigned int kind, std::vector& keys); bool getDomainMetadata(const string& name, const std::string& kind, std::vector& meta); bool setDomainMetadata(const string& name, const std::string& kind, const std::vector& 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;