- `is-our-domain-query`: Checks if the domain (either id or name) is in the 'domains' table. This query is run before any other (possibly heavy) query.
-- `insert-zone-query`: Add a new NATIVE domain.
+- `insert-zone-query`: Add a new domain. This query also requires the type, masters and account fields
- `update-kind-query`: Called to update the type of domain.
- `delete-zone-query` Called to delete all records of a zone. Used before an incoming AXFR.
- `delete-domain-query`: Called to delete a domain from the domains-table.
### On slaves
- `info-all-slaves-query`: Called to retrieve all slave domains.
-- `insert-slave-query`: Called to add a domain as slave after a supermaster notification.
- `master-zone-query`: Called to determine the master of a zone.
- `update-lastcheck-query`: Called to update the last time a slave domain was successfully checked for freshness.
- `update-master-query`: Called to update the master address of a domain.
declare(suffix,"supermaster-query","", "select account from supermasters where ip=? and nameserver=?");
declare(suffix,"supermaster-name-to-ips", "", "select ip,account from supermasters where nameserver=? and account=?");
- declare(suffix,"insert-zone-query","", "insert into domains (type,name) values('NATIVE',?)");
- declare(suffix,"insert-slave-query","", "insert into domains (type,name,master,account) values('SLAVE',?,?,?)");
+ declare(suffix,"insert-zone-query","", "insert into domains (type,name,master,account) values(?,?,?,?)");
declare(suffix, "insert-record-query", "", "insert into records (content,ttl,prio,type,domain_id,disabled,name,ordername,auth) values (?,?,?,?,?,?,?,?,?)");
declare(suffix, "insert-empty-non-terminal-order-query", "insert empty non-terminal in zone", "insert into records (type,domain_id,disabled,name,ordername,auth) values (null,?,0,?,?,?)");
declare(suffix,"supermaster-query","", "select account from supermasters where ip=? and nameserver=?");
declare(suffix,"supermaster-name-to-ips", "", "select ip,account from supermasters where nameserver=? and account=?");
- declare(suffix,"insert-zone-query","", "insert into domains (type,name) values('NATIVE',?)");
- declare(suffix,"insert-slave-query","", "insert into domains (type,name,master,account) values('SLAVE',?,?,?)");
+ declare(suffix,"insert-zone-query","", "insert into domains (type,name,master,account) values(?,?,?,?)");
declare(suffix, "insert-record-query", "", "insert into records (content,ttl,prio,type,domain_id,disabled,name,ordername,auth) values (?,?,?,?,?,?,?,convert(varbinary(255),?),?)");
declare(suffix, "insert-empty-non-terminal-order-query", "insert empty non-terminal in zone", "insert into records (type,domain_id,disabled,name,ordername,auth) values (null,?,0,?,convert(varbinary(255),?),?)");
declare(suffix, "info-all-slaves-query", "","select id,name,master,last_check from domains where type='SLAVE'");
declare(suffix, "supermaster-query", "", "select account from supermasters where ip=:ip and nameserver=:nameserver");
declare(suffix, "supermaster-name-to-ips", "", "select ip,account from supermasters where nameserver=:nameserver and account=:account");
- declare(suffix, "insert-zone-query", "", "insert into domains (id,type,name) values(domains_id_sequence.nextval,'NATIVE',:domain)");
- declare(suffix, "insert-slave-query", "", "insert into domains (id,type,name,master,account) values(domains_id_sequence.nextval,'SLAVE',:domain,:masters,:account)");
+ declare(suffix, "insert-zone-query", "", "insert into domains (id,type,name,master,account) values(domains_id_sequence.nextval,:type,:domain,:masters,:account)");
declare(suffix, "insert-record-query", "", "insert into records (id,content,ttl,prio,type,domain_id,disabled,name,ordername,auth) values (records_id_sequence.nextval,:content,:ttl,:priority,:qtype,:domain_id,:disabled,:qname,:ordername || ' ',:auth)");
declare(suffix, "insert-empty-non-terminal-order-query", "insert empty non-terminal in zone", "insert into records (id,type,domain_id,disabled,name,ordername,auth) values (records_id_sequence.nextval,null,:domain_id,0,:qname,:ordername,:auth)");
declare(suffix,"supermaster-query","", "select account from supermasters where ip=$1 and nameserver=$2");
declare(suffix,"supermaster-name-to-ips", "", "select ip,account from supermasters where nameserver=$1 and account=$2");
- declare(suffix,"insert-zone-query","", "insert into domains (type,name) values('NATIVE',$1)");
- declare(suffix,"insert-slave-query","", "insert into domains (type,name,master,account) values('SLAVE',$1,$2,$3)");
+ declare(suffix,"insert-zone-query","", "insert into domains (type,name,master,account) values($1,$2,$3,$4)");
declare(suffix, "insert-record-query", "", "insert into records (content,ttl,prio,type,domain_id,disabled,name,ordername,auth) values ($1,$2,$3,$4,$5,$6,$7,$8,$9)");
declare(suffix, "insert-empty-non-terminal-order-query", "insert empty non-terminal in zone", "insert into records (type,domain_id,disabled,name,ordername,auth) values (null,$1,false,$2,$3,$4)");
declare(suffix, "supermaster-query", "", "select account from supermasters where ip=:ip and nameserver=:nameserver");
declare(suffix, "supermaster-name-to-ips", "", "select ip,account from supermasters where nameserver=:nameserver and account=:account");
- declare(suffix, "insert-zone-query", "", "insert into domains (type,name) values('NATIVE',:domain)");
- declare(suffix, "insert-slave-query", "", "insert into domains (type,name,master,account) values('SLAVE',:domain,:masters,:account)");
+ declare(suffix, "insert-zone-query", "", "insert into domains (type,name,master,account) values(:type, :domain, :masters, :account)");
declare(suffix, "insert-record-query", "", "insert into records (content,ttl,prio,type,domain_id,disabled,name,ordername,auth) values (:content,:ttl,:priority,:qtype,:domain_id,:disabled,:qname,:ordername,:auth)");
declare(suffix, "insert-empty-non-terminal-order-query", "insert empty non-terminal in zone", "insert into records (type,domain_id,disabled,name,ordername,auth) values (null,:domain_id,0,:qname,:ordername,:auth)");
d_SuperMasterInfoQuery=getArg("supermaster-query");
d_GetSuperMasterIPs=getArg("supermaster-name-to-ips");
d_InsertZoneQuery=getArg("insert-zone-query");
- d_InsertSlaveZoneQuery=getArg("insert-slave-query");
d_InsertRecordQuery=getArg("insert-record-query");
d_UpdateMasterOfZoneQuery=getArg("update-master-query");
d_UpdateKindOfZoneQuery=getArg("update-kind-query");
d_SuperMasterInfoQuery_stmt = NULL;
d_GetSuperMasterIPs_stmt = NULL;
d_InsertZoneQuery_stmt = NULL;
- d_InsertSlaveZoneQuery_stmt = NULL;
d_InsertRecordQuery_stmt = NULL;
d_InsertEmptyNonTerminalOrderQuery_stmt = NULL;
d_UpdateMasterOfZoneQuery_stmt = NULL;
return false;
}
-bool GSQLBackend::createDomain(const DNSName &domain)
+bool GSQLBackend::createDomain(const DNSName &domain, const string &type, const string &masters, const string &account)
{
try {
d_InsertZoneQuery_stmt->
+ bind("type", type)->
bind("domain", domain)->
+ bind("masters", masters)->
+ bind("account", account)->
execute()->
reset();
}
masters = boost::join(tmp, ", ");
}
}
- d_InsertSlaveZoneQuery_stmt->
- bind("domain", domain)->
- bind("masters", masters)->
- bind("account", account)->
- execute()->
- reset();
+ createDomain(domain, "SLAVE", masters, account);
}
catch(SSqlException &e) {
throw DBException("Database error trying to insert new slave domain '"+domain.toString()+"': "+ e.txtReason());
d_InfoOfAllSlaveDomainsQuery_stmt = d_db->prepare(d_InfoOfAllSlaveDomainsQuery, 0);
d_SuperMasterInfoQuery_stmt = d_db->prepare(d_SuperMasterInfoQuery, 2);
d_GetSuperMasterIPs_stmt = d_db->prepare(d_GetSuperMasterIPs, 2);
- d_InsertZoneQuery_stmt = d_db->prepare(d_InsertZoneQuery, 1);
- d_InsertSlaveZoneQuery_stmt = d_db->prepare(d_InsertSlaveZoneQuery, 3);
+ d_InsertZoneQuery_stmt = d_db->prepare(d_InsertZoneQuery, 4);
d_InsertRecordQuery_stmt = d_db->prepare(d_InsertRecordQuery, 9);
d_InsertEmptyNonTerminalOrderQuery_stmt = d_db->prepare(d_InsertEmptyNonTerminalOrderQuery, 4);
d_UpdateMasterOfZoneQuery_stmt = d_db->prepare(d_UpdateMasterOfZoneQuery, 2);
release(&d_SuperMasterInfoQuery_stmt);
release(&d_GetSuperMasterIPs_stmt);
release(&d_InsertZoneQuery_stmt);
- release(&d_InsertSlaveZoneQuery_stmt);
release(&d_InsertRecordQuery_stmt);
release(&d_InsertEmptyNonTerminalOrderQuery_stmt);
release(&d_UpdateMasterOfZoneQuery_stmt);
bool feedRecord(const DNSResourceRecord &r, string *ordername=0);
bool feedEnts(int domain_id, map<DNSName,bool>& nonterm);
bool feedEnts3(int domain_id, const DNSName &domain, map<DNSName,bool> &nonterm, const NSEC3PARAMRecordContent& ns3prc, bool narrow);
- bool createDomain(const DNSName &domain);
+ bool createDomain(const DNSName &domain, const string &type, const string &masters, const string &account);
+ bool createDomain(const DNSName &domain) {
+ return createDomain(domain, "NATIVE", "", "");
+ };
bool createSlaveDomain(const string &ip, const DNSName &domain, const string &nameserver, const string &account);
bool deleteDomain(const DNSName &domain);
bool superMasterBackend(const string &ip, const DNSName &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db);
string d_GetSuperMasterIPs;
string d_InsertZoneQuery;
- string d_InsertSlaveZoneQuery;
string d_InsertRecordQuery;
string d_InsertEmptyNonTerminalOrderQuery;
string d_UpdateMasterOfZoneQuery;
SSqlStatement* d_SuperMasterInfoQuery_stmt;
SSqlStatement* d_GetSuperMasterIPs_stmt;
SSqlStatement* d_InsertZoneQuery_stmt;
- SSqlStatement* d_InsertSlaveZoneQuery_stmt;
SSqlStatement* d_InsertRecordQuery_stmt;
SSqlStatement* d_InsertEmptyNonTerminalOrderQuery_stmt;
SSqlStatement* d_UpdateMasterOfZoneQuery_stmt;