declare(suffix, "get-order-before-query", "DNSSEC Ordering Query, before", "select ordername, name from records where ordername <= ? and domain_id=? and disabled=0 and ordername is not null order by 1 desc limit 1");
declare(suffix, "get-order-after-query", "DNSSEC Ordering Query, after", "select min(ordername) from records where ordername > ? and domain_id=? and disabled=0 and ordername is not null");
declare(suffix, "get-order-last-query", "DNSSEC Ordering Query, last", "select ordername, name from records where ordername != '' and domain_id=? and disabled=0 and ordername is not null order by 1 desc limit 1");
- declare(suffix, "set-order-and-auth-query", "DNSSEC set ordering query", "update records set ordername=?,auth=? where name=? and domain_id=? and disabled=0");
- declare(suffix, "set-auth-on-ds-record-query", "DNSSEC set auth on a DS record", "update records set auth=1 where domain_id=? and name=? and type='DS' and disabled=0");
- declare(suffix, "nullify-ordername-and-update-auth-query", "DNSSEC nullify ordername and update auth query", "update records set ordername=NULL,auth=? where domain_id=? and name=? and disabled=0");
- declare(suffix, "nullify-ordername-and-auth-query", "DNSSEC nullify ordername and auth query", "update records set ordername=NULL,auth=0 where name=? and type=? and domain_id=? and disabled=0");
+ declare(suffix, "update-ordername-and-auth-query", "DNSSEC update ordername and auth for a qname query", "update records set ordername=?,auth=? where domain_id=? and name=? and disabled=0");
+ declare(suffix, "update-ordername-and-auth-type-query", "DNSSEC update ordername and auth for a rrset query", "update records set ordername=?,auth=? where domain_id=? and name=? and type=? and disabled=0");
+ declare(suffix, "nullify-ordername-and-update-auth-query", "DNSSEC nullify ordername and update auth for a qname query", "update records set ordername=NULL,auth=? where domain_id=? and name=? and disabled=0");
+ declare(suffix, "nullify-ordername-and-update-auth-type-query", "DNSSEC nullify ordername and update auth for a rrset query", "update records set ordername=NULL,auth=? where domain_id=? and name=? and type=? and disabled=0");
declare(suffix,"update-master-query","", "update domains set master=? where name=?");
declare(suffix,"update-kind-query","", "update domains set type=? where name=?");
declare(suffix, "get-order-before-query", "DNSSEC Ordering Query, before", "select * FROM (select trim(ordername), name from records where disabled=0 and ordername <= :ordername || ' ' and domain_id=:domain_id and ordername is not null order by ordername desc) where rownum=1");
declare(suffix, "get-order-after-query", "DNSSEC Ordering Query, after", "select trim(min(ordername)) from records where disabled=0 and ordername > :ordername || ' ' and domain_id=:domain_id and ordername is not null");
declare(suffix, "get-order-last-query", "DNSSEC Ordering Query, last", "select * from (select trim(ordername), name from records where disabled=0 and ordername != ' ' and domain_id=:domain_id and ordername is not null order by ordername desc) where rownum=1");
- declare(suffix, "set-order-and-auth-query", "DNSSEC set ordering query", "update records set ordername=:ordername || ' ',auth=:auth where name=:qname and domain_id=:domain_id and disabled=0");
- declare(suffix, "set-auth-on-ds-record-query", "DNSSEC set auth on a DS record", "update records set auth=1 where domain_id=:domain_id and name=:qname and type='DS' and disabled=0");
- declare(suffix, "nullify-ordername-and-update-auth-query", "DNSSEC nullify ordername and update auth query", "update records set ordername=NULL,auth=:auth where domain_id=:domain_id and name=:qname and disabled=0");
- declare(suffix, "nullify-ordername-and-auth-query", "DNSSEC nullify ordername and auth query", "update records set ordername=NULL,auth=0 where name=:qname and type=:qtype and domain_id=:domain_id and disabled=0");
+ declare(suffix, "update-ordername-and-auth-query", "DNSSEC update ordername and auth for a qname query", "update records set ordername=:ordername || ' ',auth=:auth where domain_id=:domain_id and name=:qname and disabled=0");
+ declare(suffix, "update-ordername-and-auth-type-query", "DNSSEC update ordername and auth for a rrset query", "update records set ordername=:ordername || ' ',auth=:auth where domain_id=:domain_id and name=:qname and type=:qtype and disabled=0");
+ declare(suffix, "nullify-ordername-and-update-auth-query", "DNSSEC nullify ordername and update auth for a qname query", "update records set ordername=NULL,auth=:auth where domain_id=:domain_id and name=:qname and disabled=0");
+ declare(suffix, "nullify-ordername-and-update-auth-type-query", "DNSSEC nullify ordername and update auth for a rrset query", "update records set ordername=NULL,auth=:auth where domain_id=:domain_id and name=:qname and type=:qtype and disabled=0");
declare(suffix, "update-master-query", "", "update domains set master=:master where name=:domain");
declare(suffix, "update-kind-query", "", "update domains set type=:kind where name=:domain");
declare(suffix, "get-order-before-query", "DNSSEC Ordering Query, before", "select ordername, name from records where disabled=false and ordername ~<=~ $1 and domain_id=$2 and ordername is not null order by 1 using ~>~ limit 1");
declare(suffix, "get-order-after-query", "DNSSEC Ordering Query, after", "select ordername from records where disabled=false and ordername ~>~ $1 and domain_id=$2 and ordername is not null order by 1 using ~<~ limit 1");
declare(suffix, "get-order-last-query", "DNSSEC Ordering Query, last", "select ordername, name from records where disabled=false and ordername != '' and domain_id=$1 and ordername is not null order by 1 using ~>~ limit 1");
- declare(suffix, "set-order-and-auth-query", "DNSSEC set ordering query", "update records set ordername=$1,auth=$2 where name=$3 and domain_id=$4 and disabled=false");
- declare(suffix, "set-auth-on-ds-record-query", "DNSSEC set auth on a DS record", "update records set auth=true where domain_id=$1 and name=$2 and type='DS' and disabled=false");
- declare(suffix, "nullify-ordername-and-update-auth-query", "DNSSEC nullify ordername and update auth query", "update records set ordername=NULL,auth=$1 where domain_id=$2 and name=$3 and disabled=false");
- declare(suffix, "nullify-ordername-and-auth-query", "DNSSEC nullify ordername and auth query", "update records set ordername=NULL,auth=false where name=$1 and type=$2 and domain_id=$3 and disabled=false");
+ declare(suffix, "update-ordername-and-auth-query", "DNSSEC update ordername and auth for a qname query", "update records set ordername=$1,auth=$2 where domain_id=$3 and name=$4 and disabled=false");
+ declare(suffix, "update-ordername-and-auth-type-query", "DNSSEC update ordername and auth for a rrset query", "update records set ordername=$1,auth=$2 where domain_id=$3 and name=$4 and type=$5 and disabled=false");
+ declare(suffix, "nullify-ordername-and-update-auth-query", "DNSSEC nullify ordername and update auth for a qname query", "update records set ordername=NULL,auth=$1 where domain_id=$2 and name=$3 and disabled=false");
+ declare(suffix, "nullify-ordername-and-update-auth-type-query", "DNSSEC nullify ordername and update auth for a rrset query", "update records set ordername=NULL,auth=$1 where domain_id=$2 and name=$3 and type=$4 and disabled=false");
declare(suffix,"update-master-query","", "update domains set master=$1 where name=$2");
declare(suffix,"update-kind-query","", "update domains set type=$1 where name=$2");
declare(suffix, "get-order-before-query", "DNSSEC Ordering Query, before", "select ordername, name from records where disabled=0 and ordername <= :ordername and domain_id=:domain_id and ordername is not null order by 1 desc limit 1");
declare(suffix, "get-order-after-query", "DNSSEC Ordering Query, after", "select min(ordername) from records where disabled=0 and ordername > :ordername and domain_id=:domain_id and ordername is not null");
declare(suffix, "get-order-last-query", "DNSSEC Ordering Query, last", "select ordername, name from records where disabled=0 and ordername != '' and domain_id=:domain_id and ordername is not null order by 1 desc limit 1");
- declare(suffix, "set-order-and-auth-query", "DNSSEC set ordering query", "update records set ordername=:ordername,auth=:auth where name=:qname and domain_id=:domain_id and disabled=0");
- declare(suffix, "set-auth-on-ds-record-query", "DNSSEC set auth on a DS record", "update records set auth=1 where domain_id=:domain_id and name=:qname and type='DS' and disabled=0");
- declare(suffix, "nullify-ordername-and-update-auth-query", "DNSSEC nullify ordername and update auth query", "update records set ordername=NULL,auth=:auth where domain_id=:domain_id and name=:qname and disabled=0");
- declare(suffix, "nullify-ordername-and-auth-query", "DNSSEC nullify ordername and auth query", "update records set ordername=NULL,auth=0 where name=:qname and type=:qtype and domain_id=:domain_id and disabled=0");
+ declare(suffix, "update-ordername-and-auth-query", "DNSSEC update ordername and auth for a qname query", "update records set ordername=:ordername,auth=:auth where domain_id=:domain_id and name=:qname and disabled=0");
+ declare(suffix, "update-ordername-and-auth-type-query", "DNSSEC update ordername and auth for a rrset query", "update records set ordername=:ordername,auth=:auth where domain_id=:domain_id and name=:qname and type=:qtype and disabled=0");
+ declare(suffix, "nullify-ordername-and-update-auth-query", "DNSSEC nullify ordername and update auth for a qname query", "update records set ordername=NULL,auth=:auth where domain_id=:domain_id and name=:qname and disabled=0");
+ declare(suffix, "nullify-ordername-and-update-auth-type-query", "DNSSEC nullify ordername and update auth for a rrset query", "update records set ordername=NULL,auth=:auth where domain_id=:domain_id and name=:qname and type=:qtype and disabled=0");
declare(suffix, "update-master-query", "", "update domains set master=:master where name=:domain");
declare(suffix, "update-kind-query", "", "update domains set type=:kind where name=:domain");
d_beforeOrderQuery = getArg("get-order-before-query");
d_afterOrderQuery = getArg("get-order-after-query");
d_lastOrderQuery = getArg("get-order-last-query");
- d_setOrderAuthQuery = getArg("set-order-and-auth-query");
+
+ d_updateOrderNameAndAuthQuery = getArg("update-ordername-and-auth-query");
+ d_updateOrderNameAndAuthTypeQuery = getArg("update-ordername-and-auth-type-query");
d_nullifyOrderNameAndUpdateAuthQuery = getArg("nullify-ordername-and-update-auth-query");
- d_nullifyOrderNameAndAuthQuery = getArg("nullify-ordername-and-auth-query");
- d_setAuthOnDsRecordQuery = getArg("set-auth-on-ds-record-query");
+ d_nullifyOrderNameAndUpdateAuthTypeQuery = getArg("nullify-ordername-and-update-auth-type-query");
d_AddDomainKeyQuery = getArg("add-domain-key-query");
d_ListDomainKeysQuery = getArg("list-domain-keys-query");
d_beforeOrderQuery_stmt = NULL;
d_afterOrderQuery_stmt = NULL;
d_lastOrderQuery_stmt = NULL;
- d_setOrderAuthQuery_stmt = NULL;
+ d_updateOrderNameAndAuthQuery_stmt = NULL;
+ d_updateOrderNameAndAuthTypeQuery_stmt = NULL;
d_nullifyOrderNameAndUpdateAuthQuery_stmt = NULL;
- d_nullifyOrderNameAndAuthQuery_stmt = NULL;
- d_nullifyOrderNameAndAuthENTQuery_stmt = NULL;
- d_setAuthOnDsRecordQuery_stmt = NULL;
+ d_nullifyOrderNameAndUpdateAuthTypeQuery_stmt = NULL;
d_removeEmptyNonTerminalsFromZoneQuery_stmt = NULL;
d_insertEmptyNonTerminalQuery_stmt = NULL;
d_deleteEmptyNonTerminalQuery_stmt = NULL;
}
}
-bool GSQLBackend::updateDNSSECOrderAndAuth(uint32_t domain_id, const DNSName& zonename, const DNSName& qname, bool auth)
-{
- if(!d_dnssecQueries)
- return false;
- string ins=toLower(labelReverse(makeRelative(qname.toString(), zonename.toString()))); //FIXME makeRelative to dnsname?
- return this->updateDNSSECOrderAndAuthAbsolute(domain_id, qname, ins, auth);
-}
-
-bool GSQLBackend::updateDNSSECOrderAndAuthAbsolute(uint32_t domain_id, const DNSName& qname, const std::string& ordername, bool auth)
+bool GSQLBackend::updateDNSSECOrderNameAndAuth(uint32_t domain_id, const DNSName& zonename, const DNSName& qname, const DNSName& ordername, bool auth, const uint16_t qtype)
{
if(!d_dnssecQueries)
return false;
- try {
- d_setOrderAuthQuery_stmt->
- bind("ordername", ordername)->
- bind("auth", auth)->
- bind("qname", qname)->
- bind("domain_id", domain_id)->
- execute()->
- reset();
- }
- catch(SSqlException &e) {
- throw PDNSException("GSQLBackend unable to update ordername/auth for domain_id "+itoa(domain_id)+": "+e.txtReason());
- }
- return true;
-}
-
-bool GSQLBackend::nullifyDNSSECOrderNameAndUpdateAuth(uint32_t domain_id, const DNSName& qname, bool auth)
-{
- if(!d_dnssecQueries)
- return false;
-
- try {
- d_nullifyOrderNameAndUpdateAuthQuery_stmt->
- bind("auth", auth)->
- bind("domain_id", domain_id)->
- bind("qname", qname)->
- execute()->
- reset();
- }
- catch(SSqlException &e) {
- throw PDNSException("GSQLBackend unable to nullify ordername and update auth for domain_id "+itoa(domain_id)+": "+e.txtReason());
- }
- return true;
-}
-
-bool GSQLBackend::nullifyDNSSECOrderNameAndAuth(uint32_t domain_id, const DNSName& qname, const std::string& type)
-{
- if(!d_dnssecQueries)
- return false;
-
- try {
- d_nullifyOrderNameAndAuthQuery_stmt->
- bind("qname", qname)->
- bind("qtype", type)->
- bind("domain_id", domain_id)->
- execute()->
- reset();
- }
- catch(SSqlException &e) {
- throw PDNSException("GSQLBackend unable to nullify ordername/auth for domain_id "+itoa(domain_id)+": "+e.txtReason());
- }
- return true;
-}
-
-bool GSQLBackend::setDNSSECAuthOnDsRecord(uint32_t domain_id, const DNSName& qname)
-{
- if(!d_dnssecQueries)
- return false;
-
- try {
- d_setAuthOnDsRecordQuery_stmt->
- bind("domain_id", domain_id)->
- bind("qname", qname)->
- execute()->
- reset();
- }
- catch(SSqlException &e) {
- throw PDNSException("GSQLBackend unable to set auth on DS record "+qname.toString()+" for domain_id "+itoa(domain_id)+": "+e.txtReason());
+ if (!ordername.empty()) {
+ if (qtype == QType::ANY) {
+ try {
+ d_updateOrderNameAndAuthQuery_stmt->
+ bind("ordername", ordername.makeRelative(zonename).labelReverse().toString(" ", false))->
+ bind("auth", auth)->
+ bind("domain_id", domain_id)->
+ bind("qname", qname)->
+ execute()->
+ reset();
+ }
+ catch(SSqlException &e) {
+ throw PDNSException("GSQLBackend unable to update ordername and auth for domain_id "+itoa(domain_id)+": "+e.txtReason());
+ }
+ } else {
+ try {
+ d_updateOrderNameAndAuthTypeQuery_stmt->
+ bind("ordername", ordername.makeRelative(zonename).labelReverse().toString(" ", false))->
+ bind("auth", auth)->
+ bind("domain_id", domain_id)->
+ bind("qname", qname)->
+ bind("qtype", QType(qtype).getName())->
+ execute()->
+ reset();
+ }
+ catch(SSqlException &e) {
+ throw PDNSException("GSQLBackend unable to update ordername and auth per type for domain_id "+itoa(domain_id)+": "+e.txtReason());
+ }
+ }
+ } else {
+ if (qtype == QType::ANY) {
+ try {
+ d_nullifyOrderNameAndUpdateAuthQuery_stmt->
+ bind("auth", auth)->
+ bind("domain_id", domain_id)->
+ bind("qname", qname)->
+ execute()->
+ reset();
+ }
+ catch(SSqlException &e) {
+ throw PDNSException("GSQLBackend unable to nullify ordername and update auth for domain_id "+itoa(domain_id)+": "+e.txtReason());
+ }
+ } else {
+ try {
+ d_nullifyOrderNameAndUpdateAuthTypeQuery_stmt->
+ bind("auth", auth)->
+ bind("domain_id", domain_id)->
+ bind("qname", qname)->
+ bind("qtype", QType(qtype).getName())->
+ execute()->
+ reset();
+ }
+ catch(SSqlException &e) {
+ throw PDNSException("GSQLBackend unable to nullify ordername and update auth per type for domain_id "+itoa(domain_id)+": "+e.txtReason());
+ }
+ }
}
return true;
}
throw PDNSException("GSQLBackend list query: "+e.txtReason());
}
- d_qname="";
+ d_qname.clear();
return true;
}
catch(SSqlException &e) {
throw PDNSException("GSQLBackend listSubZone query: "+e.txtReason());
}
- d_qname="";
+ d_qname.clear();
return true;
}
d_beforeOrderQuery_stmt = d_db->prepare(d_beforeOrderQuery, 2);
d_afterOrderQuery_stmt = d_db->prepare(d_afterOrderQuery, 2);
d_lastOrderQuery_stmt = d_db->prepare(d_lastOrderQuery, 1);
- d_setOrderAuthQuery_stmt = d_db->prepare(d_setOrderAuthQuery, 4);
+ d_updateOrderNameAndAuthQuery_stmt = d_db->prepare(d_updateOrderNameAndAuthQuery, 4);
+ d_updateOrderNameAndAuthTypeQuery_stmt = d_db->prepare(d_updateOrderNameAndAuthTypeQuery, 5);
d_nullifyOrderNameAndUpdateAuthQuery_stmt = d_db->prepare(d_nullifyOrderNameAndUpdateAuthQuery, 3);
- d_nullifyOrderNameAndAuthQuery_stmt = d_db->prepare(d_nullifyOrderNameAndAuthQuery, 3);
- d_nullifyOrderNameAndAuthENTQuery_stmt = d_db->prepare(d_nullifyOrderNameAndAuthENTQuery, 0);
- d_setAuthOnDsRecordQuery_stmt = d_db->prepare(d_setAuthOnDsRecordQuery, 2);
+ d_nullifyOrderNameAndUpdateAuthTypeQuery_stmt = d_db->prepare(d_nullifyOrderNameAndUpdateAuthTypeQuery, 4);
d_removeEmptyNonTerminalsFromZoneQuery_stmt = d_db->prepare(d_removeEmptyNonTerminalsFromZoneQuery, 1);
d_insertEmptyNonTerminalQuery_stmt = d_db->prepare(d_insertEmptyNonTerminalQuery, 2);
d_deleteEmptyNonTerminalQuery_stmt = d_db->prepare(d_deleteEmptyNonTerminalQuery, 2);
release(&d_beforeOrderQuery_stmt);
release(&d_afterOrderQuery_stmt);
release(&d_lastOrderQuery_stmt);
- release(&d_setOrderAuthQuery_stmt);
+ release(&d_updateOrderNameAndAuthQuery_stmt);
+ release(&d_updateOrderNameAndAuthTypeQuery_stmt);
release(&d_nullifyOrderNameAndUpdateAuthQuery_stmt);
- release(&d_nullifyOrderNameAndAuthQuery_stmt);
- release(&d_nullifyOrderNameAndAuthENTQuery_stmt);
- release(&d_setAuthOnDsRecordQuery_stmt);
+ release(&d_nullifyOrderNameAndUpdateAuthTypeQuery_stmt);
release(&d_removeEmptyNonTerminalsFromZoneQuery_stmt);
release(&d_insertEmptyNonTerminalQuery_stmt);
release(&d_deleteEmptyNonTerminalQuery_stmt);
bool setAccount(const DNSName &domain, const string &account);
virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const string& qname, DNSName& unhashed, std::string& before, std::string& after);
- bool updateDNSSECOrderAndAuth(uint32_t domain_id, const DNSName& zonename, const DNSName& qname, bool auth);
- virtual bool updateDNSSECOrderAndAuthAbsolute(uint32_t domain_id, const DNSName& qname, const std::string& ordername, bool auth);
- virtual bool nullifyDNSSECOrderNameAndUpdateAuth(uint32_t domain_id, const DNSName& qname, bool auth);
- virtual bool nullifyDNSSECOrderNameAndAuth(uint32_t domain_id, const DNSName& qname, const std::string& type);
- virtual bool setDNSSECAuthOnDsRecord(uint32_t domain_id, const DNSName& qname);
+ virtual bool updateDNSSECOrderNameAndAuth(uint32_t domain_id, const DNSName& zonename, const DNSName& qname, const DNSName& ordername, bool auth, const uint16_t=QType::ANY);
+
virtual bool updateEmptyNonTerminals(uint32_t domain_id, const DNSName& zonename, set<DNSName>& insert ,set<DNSName>& erase, bool remove);
virtual bool doesDNSSEC();
string d_beforeOrderQuery;
string d_afterOrderQuery;
string d_lastOrderQuery;
- string d_setOrderAuthQuery;
+
+ string d_updateOrderNameAndAuthQuery;
+ string d_updateOrderNameAndAuthTypeQuery;
string d_nullifyOrderNameAndUpdateAuthQuery;
- string d_nullifyOrderNameAndAuthQuery;
- string d_nullifyOrderNameAndAuthENTQuery;
- string d_setAuthOnDsRecordQuery;
+ string d_nullifyOrderNameAndUpdateAuthTypeQuery;
+
string d_removeEmptyNonTerminalsFromZoneQuery;
string d_insertEmptyNonTerminalQuery;
string d_deleteEmptyNonTerminalQuery;
SSqlStatement* d_beforeOrderQuery_stmt;
SSqlStatement* d_afterOrderQuery_stmt;
SSqlStatement* d_lastOrderQuery_stmt;
- SSqlStatement* d_setOrderAuthQuery_stmt;
+ SSqlStatement* d_updateOrderNameAndAuthQuery_stmt;
+ SSqlStatement* d_updateOrderNameAndAuthTypeQuery_stmt;
SSqlStatement* d_nullifyOrderNameAndUpdateAuthQuery_stmt;
- SSqlStatement* d_nullifyOrderNameAndAuthQuery_stmt;
- SSqlStatement* d_nullifyOrderNameAndAuthENTQuery_stmt;
- SSqlStatement* d_setAuthOnDsRecordQuery_stmt;
+ SSqlStatement* d_nullifyOrderNameAndUpdateAuthTypeQuery_stmt;
SSqlStatement* d_removeEmptyNonTerminalsFromZoneQuery_stmt;
SSqlStatement* d_insertEmptyNonTerminalQuery_stmt;
SSqlStatement* d_deleteEmptyNonTerminalQuery_stmt;
virtual SSqlStatement* bind(const string& name, unsigned long long value)=0;
virtual SSqlStatement* bind(const string& name, const std::string& value)=0;
SSqlStatement* bind(const string& name, const DNSName& value) {
- return bind(name, stripDot(value.toString()));
+ return bind(name, toLower(value.toStringNoDot())); // FIXME toLower()?
}
virtual SSqlStatement* bindNull(const string& name)=0;
virtual SSqlStatement* execute()=0;;
virtual bool getBeforeAndAfterNames(uint32_t id, const DNSName& zonename, const DNSName& qname, DNSName& before, DNSName& after);
- virtual bool updateDNSSECOrderAndAuth(uint32_t domain_id, const DNSName& zonename, const DNSName& qname, bool auth)
- {
- return false;
- }
-
- virtual bool updateDNSSECOrderAndAuthAbsolute(uint32_t domain_id, const DNSName& qname, const std::string& ordername, bool auth)
+ virtual bool updateDNSSECOrderNameAndAuth(uint32_t domain_id, const DNSName& zonename, const DNSName& qname, const DNSName& ordername, bool auth, const uint16_t qtype=QType::ANY)
{
return false;
}
return false;
}
- virtual bool nullifyDNSSECOrderNameAndUpdateAuth(uint32_t domain_id, const DNSName& qname, bool auth)
- {
- return false;
- }
-
- virtual bool nullifyDNSSECOrderNameAndAuth(uint32_t domain_id, const DNSName& qname, const std::string& type)
- {
- return false;
- }
-
- virtual bool setDNSSECAuthOnDsRecord(uint32_t domain_id, const DNSName& qname)
- {
- return false;
- }
-
virtual bool doesDNSSEC()
{
return false;