d_setOrderAuthQuery = getArg("set-order-and-auth-query");
}
+bool GSQLBackend::updateDNSSECOrderAndAuth(uint32_t domain_id, const std::string& zonename, const std::string& qname, bool auth)
+{
+ char output[1024];
+ // ordername='%s',auth=%d where name='%s' and domain_id='%d'
+
+ string ins=toLower(labelReverse(makeRelative(qname, zonename)));
+ snprintf(output, sizeof(output)-1, d_setOrderAuthQuery.c_str(), sqlEscape(ins).c_str(), auth, sqlEscape(qname).c_str(), domain_id);
+ cerr<<"sql: '"<<output<<"'\n";
+
+ d_db->doCommand(output);
+
+ return true;
+}
+
bool GSQLBackend::getBeforeAndAfterNames(uint32_t id, const std::string& zonename, const std::string& qname, std::string& before, std::string& after)
{
cerr<<"gsql before/after called for id="<<id<<", qname="<<qname<<endl;
bool getDomainInfo(const string &domain, DomainInfo &di);
void setNotified(uint32_t domain_id, uint32_t serial);
bool getBeforeAndAfterNames(uint32_t id, const std::string& zname, const std::string& qname, std::string& before, std::string& after);
+ bool updateDNSSECOrderAndAuth(uint32_t domain_id, const std::string& zonename, const std::string& qname, bool auth);
+
private:
string d_qname;
QType d_qtype;
return false;
}
+ virtual bool updateDNSSECOrderAndAuth(uint32_t domain_id, const std::string& zonename, const std::string& qname, bool auth)
+ {
+ return false;
+ }
+
//! Initiates a list of the specified domain
/** Once initiated, DNSResourceRecord objects can be retrieved using get(). Should return false
if the backend does not consider itself responsible for the id passed.
UeberBackend::go();
}
-void listZones()
+void orderZone(const std::string& zone)
{
loadMainConfig();
- cerr<<"hier1 launcheable: "<<BackendMakers().numLauncheable()<<endl;
-
- cerr<<"new"<<endl;
+
UeberBackend* B = new UeberBackend("default");
SOAData sd;
- cerr<<"hier2 "<<(void*)B<<endl;
- if(!B->getSOA("powerdnssec.org", sd)) {
+
+ if(!B->getSOA(zone, sd)) {
cerr<<"No SOA!"<<endl;
}
cerr<<"ID: "<<sd.domain_id<<endl;
- sd.db->list("powerdnssec.org", sd.domain_id);
+ sd.db->list(zone, sd.domain_id);
DNSResourceRecord rr;
+
+ set<string> qnames;
while(sd.db->get(rr)) {
- cerr<<rr.qname<<endl;
+ // cerr<<rr.qname<<endl;
+ qnames.insert(rr.qname);
+ }
+
+ BOOST_FOREACH(const string& qname, qnames)
+ {
+ sd.db->updateDNSSECOrderAndAuth(sd.domain_id, zone, qname, true);
}
cerr<<"Done listing"<<endl;
}
DNSSECKeeper dk(g_vm["key-repository"].as<string>());
- if(cmds[0] == "list-zones") {
- listZones();
+ if(cmds[0] == "order-zone") {
+ if(cmds.size() != 2) {
+ cerr << "Error: "<<cmds[0]<<" takes exactly 1 parameter"<<endl;
+ return 0;
+ }
+ orderZone(cmds[1]);
}
else if(cmds[0] == "update-zone-keys") {
if(cmds.size() != 2) {