]> granicus.if.org Git - pdns/commitdiff
fix NSEC wraparound
authorPeter van Dijk <peter.van.dijk@netherlabs.nl>
Mon, 27 Feb 2012 10:47:17 +0000 (10:47 +0000)
committerPeter van Dijk <peter.van.dijk@netherlabs.nl>
Mon, 27 Feb 2012 10:47:17 +0000 (10:47 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@2429 d19b8d6e-7fed-0310-83ef-9ca221ded41b

modules/gmysqlbackend/gmysqlbackend.cc
modules/gpgsqlbackend/gpgsqlbackend.cc
modules/gsqlite3backend/gsqlite3backend.cc
pdns/backends/gsql/gsqlbackend.cc
pdns/backends/gsql/gsqlbackend.hh

index e5a03aa8d26eb53058229a72ae3e39d4fc1f6d07..a1d7543bb0b7279b678529c1741e665e9f981ed1 100644 (file)
@@ -87,12 +87,12 @@ public:
     declare(suffix,"insert-record-query","", "insert into records (content,ttl,prio,type,domain_id,name) values ('%s',%d,%d,'%s',%d,'%s')");
     declare(suffix,"insert-record-query-auth","", "insert into records (content,ttl,prio,type,domain_id,name,auth) values ('%s',%d,%d,'%s',%d,'%s', '%d')");
     
+    declare(suffix,"get-order-first-query","DNSSEC Ordering Query, first", "select ordername, name from records where auth=1 and domain_id=%d order by 1 asc limit 1");
     declare(suffix,"get-order-before-query","DNSSEC Ordering Query, before", "select ordername, name from records where ordername <= '%s' and auth=1 and domain_id=%d order by 1 desc limit 1");
     declare(suffix,"get-order-after-query","DNSSEC Ordering Query, after", "select min(ordername) from records where ordername > '%s' and auth=1 and domain_id=%d");
     declare(suffix,"get-order-last-query","DNSSEC Ordering Query, last", "select ordername, name from records where ordername != '' and auth=1 and domain_id=%d order by 1 desc limit 1");
     declare(suffix,"set-order-and-auth-query", "DNSSEC set ordering query", "update records set ordername='%s',auth=%d where name='%s' and domain_id='%d'");
     
-    
     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");
index 406c44d6b714c93636aefef9b654d79839f64894..5d24595a1ebc506ca5ce9f263050a7ad107af02b 100644 (file)
@@ -84,6 +84,7 @@ public:
     declare(suffix,"insert-record-query","", "insert into records (content,ttl,prio,type,domain_id,name) values (E'%s',%d,%d,'%s',%d,E'%s')");
     declare(suffix,"insert-record-query-auth","", "insert into records (content,ttl,prio,type,domain_id,name,auth) values (E'%s',%d,%d,'%s',%d,E'%s', '%d')");
     
+    declare(suffix,"get-order-first-query","DNSSEC Ordering Query, last", "select ordername, name from records where auth and domain_id=%d order by 1 asc limit 1");
     declare(suffix,"get-order-before-query","DNSSEC Ordering Query, before", "select ordername, name from records where ordername <= E'%s' and auth and domain_id=%d order by 1 desc limit 1");
     declare(suffix,"get-order-after-query","DNSSEC Ordering Query, after", "select min(ordername) from records where ordername > E'%s' and auth and domain_id=%d");
     declare(suffix,"get-order-last-query","DNSSEC Ordering Query, last", "select ordername, name from records where ordername != '' and auth and domain_id=%d order by 1 desc limit 1");
index 2c1899e4b2f803b61d0d6a304d443698ef8def32..5bdc3428bc35b2b93ac25e841790289361cb75ab 100644 (file)
@@ -83,6 +83,7 @@ public:
 
     declare(suffix,"list-query-auth","AXFR query", "select content,ttl,prio,type,domain_id,name, auth from records where domain_id='%d' order by name, type");
     
+    declare(suffix,"get-order-first-query","DNSSEC Ordering Query, first", "select ordername, name from records where auth=1 and domain_id=%d order by 1 asc limit 1");
     declare(suffix,"get-order-before-query","DNSSEC Ordering Query, before", "select ordername, name from records where ordername <= '%s' and auth=1 and domain_id=%d order by 1 desc limit 1");
     declare(suffix,"get-order-after-query","DNSSEC Ordering Query, after", "select min(ordername) from records where ordername > '%s' and auth=1 and domain_id=%d");
     declare(suffix,"get-order-last-query","DNSSEC Ordering Query, last", "select ordername, name from records where ordername != '' and auth=1 and domain_id=%d order by 1 desc limit 1");
index de82cee894e2029cdb45c038f4ba3bfd68dd39f6..1d04dfaa44f1d0b04d092367a2caff5e70be7878 100644 (file)
@@ -281,6 +281,7 @@ GSQLBackend::GSQLBackend(const string &mode, const string &suffix)
   
   if (d_dnssecQueries)
   {
+    d_firstOrderQuery = getArg("get-order-first-query");
     d_beforeOrderQuery = getArg("get-order-before-query");
     d_afterOrderQuery = getArg("get-order-after-query");
     d_lastOrderQuery = getArg("get-order-last-query");
@@ -335,7 +336,6 @@ bool GSQLBackend::getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string&
   char output[1024];
   string tmp=lcqname;
 
-retryAfter:
   snprintf(output, sizeof(output)-1, d_afterOrderQuery.c_str(), sqlEscape(tmp).c_str(), id);
   
   d_db->doQuery(output);
@@ -344,9 +344,12 @@ retryAfter:
   }
 
   if(after.empty() && !tmp.empty()) {
-    //cerr<<"Oops, have to pick the first, there is no last!"<<endl;
-    tmp.clear();
-    goto retryAfter;
+    snprintf(output, sizeof(output)-1, d_firstOrderQuery.c_str(), id);
+  
+    d_db->doQuery(output);
+    while(d_db->getRow(row)) {
+      after=row[0];
+    }
   }
 
 
index f6cd3fd6e36326556c83ff06dc44798ec3ffff99..6a3638db17bfe2631401a50973df274ecffcac72 100644 (file)
@@ -84,6 +84,7 @@ private:
   string d_DeleteZoneQuery;            
   string d_ZoneLastChangeQuery;
   
+  string d_firstOrderQuery;
   string d_beforeOrderQuery;
   string d_afterOrderQuery;
   string d_lastOrderQuery;