]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
after a db lookup, always finish the get cycle
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Thu, 16 Aug 2018 19:15:59 +0000 (21:15 +0200)
committerPieter Lexis <pieter.lexis@powerdns.com>
Tue, 21 Aug 2018 10:37:35 +0000 (12:37 +0200)
(cherry picked from commit e2136c35b317c408434eaec8c0f9ee288d9b9f38)

pdns/rfc2136handler.cc

index 6f1f2ffe760d7d739419f7bab070a3f026ca6b0a..5605cc14c7b74c04223746c2e816e3716e474ca9 100644 (file)
@@ -968,6 +968,9 @@ int PacketHandler::processUpdate(DNSPacket *p) {
       di.backend->lookup(QType(QType::ANY), rr->d_name);
       while (di.backend->get(rec)) {
         if (rec.qtype != QType::CNAME && rec.qtype != QType::RRSIG) {
+          // leave database handle in a consistent state
+          while (di.backend->get(rec))
+            ;
           L<<Logger::Warning<<msgPrefix<<"Refusing update for " << rr->d_name << "/" << QType(rr->d_type).getName() << ": Data other than CNAME exists for the same name"<<endl;
           di.backend->abortTransaction();
           return RCode::Refused;
@@ -980,6 +983,9 @@ int PacketHandler::processUpdate(DNSPacket *p) {
       di.backend->lookup(QType(QType::CNAME), rr->d_name);
       while (di.backend->get(rec)) {
         if (rec.qtype == QType::CNAME && rr->d_type != QType::RRSIG) {
+          // leave database handle in a consistent state
+          while (di.backend->get(rec))
+            ;
           L<<Logger::Warning<<msgPrefix<<"Refusing update for " << rr->d_name << "/" << QType(rr->d_type).getName() << ": CNAME exists for the same name"<<endl;
           di.backend->abortTransaction();
           return RCode::Refused;