]> granicus.if.org Git - pdns/commitdiff
add in-place reordering infrastructure
authorBert Hubert <bert.hubert@netherlabs.nl>
Sat, 8 May 2010 22:13:13 +0000 (22:13 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Sat, 8 May 2010 22:13:13 +0000 (22:13 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1604 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/backends/gsql/gsqlbackend.cc
pdns/backends/gsql/gsqlbackend.hh
pdns/dnsbackend.hh
pdns/pdnssec.cc

index d672d000f67f3627eab53684ed572cafe9ffcc10..3505322281e80549e35a894c9b649e0d785e813e 100644 (file)
@@ -243,6 +243,20 @@ GSQLBackend::GSQLBackend(const string &mode, const string &suffix)
   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;
index 8d6d1c00020086fe51d6768b8f7f796b2e3042a0..55b6836cf1fab03810115acfabcdc395c38c0dda 100644 (file)
@@ -40,6 +40,8 @@ public:
   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;
index e046ae10de4d0e8e1f618b45d6dc3c566e639ba6..edebb3d4dd76fea783301a15ed4c26d6a6493715 100644 (file)
@@ -80,6 +80,11 @@ public:
     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.
index dd5955551409e2ea9c9f78ee7d6673ffa083e490..97f05aa79b5c0ee872287fcb5df1907be5940870 100644 (file)
@@ -88,24 +88,30 @@ void loadMainConfig()
   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;
 }
@@ -139,8 +145,12 @@ try
 
   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) {