From: Peter van Dijk Date: Thu, 16 Aug 2018 19:15:59 +0000 (+0200) Subject: after a db lookup, always finish the get cycle X-Git-Tag: dnsdist-1.3.3~151^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e2136c35b317c408434eaec8c0f9ee288d9b9f38;p=thirdparty%2Fpdns.git after a db lookup, always finish the get cycle --- diff --git a/pdns/rfc2136handler.cc b/pdns/rfc2136handler.cc index bfa0cb31b8..dafc8bdbc0 100644 --- a/pdns/rfc2136handler.cc +++ b/pdns/rfc2136handler.cc @@ -961,6 +961,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)) + ; g_log<d_name << "/" << QType(rr->d_type).getName() << ": Data other than CNAME exists for the same name"<abortTransaction(); return RCode::Refused; @@ -973,6 +976,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)) + ; g_log<d_name << "/" << QType(rr->d_type).getName() << ": CNAME exists for the same name"<abortTransaction(); return RCode::Refused;