From: Christian Hofstaedtler Date: Fri, 27 Sep 2013 12:55:50 +0000 (+0200) Subject: implement setMaster/setKind in GSQLBackend X-Git-Tag: rec-3.6.0-rc1~428^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c02f13efb88ac583905632f4d13dd34aff80550c;p=thirdparty%2Fpdns.git implement setMaster/setKind in GSQLBackend --- diff --git a/modules/gmysqlbackend/gmysqlbackend.cc b/modules/gmysqlbackend/gmysqlbackend.cc index ce7ef2c13c..06c3917e04 100644 --- a/modules/gmysqlbackend/gmysqlbackend.cc +++ b/modules/gmysqlbackend/gmysqlbackend.cc @@ -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"); diff --git a/modules/godbcbackend/godbcbackend.cc b/modules/godbcbackend/godbcbackend.cc index 225d2e10d8..22435070e4 100644 --- a/modules/godbcbackend/godbcbackend.cc +++ b/modules/godbcbackend/godbcbackend.cc @@ -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'"); diff --git a/modules/goraclebackend/goraclebackend.cc b/modules/goraclebackend/goraclebackend.cc index e6f635dd6d..f96e60bfae 100644 --- a/modules/goraclebackend/goraclebackend.cc +++ b/modules/goraclebackend/goraclebackend.cc @@ -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"); diff --git a/modules/gpgsqlbackend/gpgsqlbackend.cc b/modules/gpgsqlbackend/gpgsqlbackend.cc index 19ad18e8db..582cae1cd4 100644 --- a/modules/gpgsqlbackend/gpgsqlbackend.cc +++ b/modules/gpgsqlbackend/gpgsqlbackend.cc @@ -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"); diff --git a/modules/gsqlite3backend/gsqlite3backend.cc b/modules/gsqlite3backend/gsqlite3backend.cc index 71400017e9..ae88be3359 100644 --- a/modules/gsqlite3backend/gsqlite3backend.cc +++ b/modules/gsqlite3backend/gsqlite3backend.cc @@ -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"); diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc index 1c62dd2c0a..d9c8c4a575 100644 --- a/pdns/backends/gsql/gsqlbackend.cc +++ b/pdns/backends/gsql/gsqlbackend.cc @@ -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"); diff --git a/pdns/backends/gsql/gsqlbackend.hh b/pdns/backends/gsql/gsqlbackend.hh index 142a5f34d1..2405db9b45 100644 --- a/pdns/backends/gsql/gsqlbackend.hh +++ b/pdns/backends/gsql/gsqlbackend.hh @@ -43,6 +43,9 @@ public: void getUpdatedMasters(vector *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;