From: Kees Monshouwer Date: Tue, 13 Aug 2019 16:49:31 +0000 (+0200) Subject: pdns: bind-backend speedup feedRecord() X-Git-Tag: auth-4.4.0-alpha2~5^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7810eb74a93c8ab5231dbf61b6e75d872f5b8aa7;p=thirdparty%2Fpdns.git pdns: bind-backend speedup feedRecord() --- diff --git a/modules/bindbackend/bindbackend2.cc b/modules/bindbackend/bindbackend2.cc index 78c8f0c6aa..cf4f805cfb 100644 --- a/modules/bindbackend/bindbackend2.cc +++ b/modules/bindbackend/bindbackend2.cc @@ -206,6 +206,7 @@ bool Bind2Backend::startTransaction(const DNSName &qname, int id) } d_transaction_id=id; + d_transaction_qname=qname; BB2DomainInfo bbd; if(safeGetBBDomainInfo(id, &bbd)) { d_transaction_tmpname = bbd.d_filename + "XXXXXX"; @@ -268,26 +269,25 @@ bool Bind2Backend::abortTransaction() bool Bind2Backend::feedRecord(const DNSResourceRecord &rr, const DNSName &ordername, bool ordernameIsNSEC3) { - BB2DomainInfo bbd; - if (!safeGetBBDomainInfo(d_transaction_id, &bbd)) - return false; + if (d_transaction_id < 1) { + throw DBException("Bind2Backend::feedRecord() called outside of transaction"); + } string qname; - string name = bbd.d_name.toString(); - if (bbd.d_name.empty()) { + if (d_transaction_qname.empty()) { qname = rr.qname.toString(); } - else if (rr.qname.isPartOf(bbd.d_name)) { - if (rr.qname == bbd.d_name) { + else if (rr.qname.isPartOf(d_transaction_qname)) { + if (rr.qname == d_transaction_qname) { qname = "@"; } else { - DNSName relName = rr.qname.makeRelative(bbd.d_name); + DNSName relName = rr.qname.makeRelative(d_transaction_qname); qname = relName.toStringNoDot(); } } else { - throw DBException("out-of-zone data '"+rr.qname.toLogString()+"' during AXFR of zone '"+bbd.d_name.toLogString()+"'"); + throw DBException("out-of-zone data '"+rr.qname.toLogString()+"' during AXFR of zone '"+d_transaction_qname.toLogString()+"'"); } shared_ptr drc(DNSRecordContent::mastermake(rr.qtype.getCode(), QClass::IN, rr.content)); @@ -300,7 +300,7 @@ bool Bind2Backend::feedRecord(const DNSResourceRecord &rr, const DNSName &ordern case QType::CNAME: case QType::DNAME: case QType::NS: - stripDomainSuffix(&content, name); + stripDomainSuffix(&content, d_transaction_qname.toString()); // fallthrough default: if (d_of && *d_of) { diff --git a/modules/bindbackend/bindbackend2.hh b/modules/bindbackend/bindbackend2.hh index aa38223bd0..831b62bc21 100644 --- a/modules/bindbackend/bindbackend2.hh +++ b/modules/bindbackend/bindbackend2.hh @@ -288,6 +288,7 @@ private: unique_ptr d_deleteTSIGKeyQuery_stmt; unique_ptr d_getTSIGKeysQuery_stmt; + DNSName d_transaction_qname; string d_transaction_tmpname; string d_logprefix; set alsoNotify; //!< this is used to store the also-notify list of interested peers.