From b8348d1859ec661e2ea412bd3febcb2f9f48788b Mon Sep 17 00:00:00 2001 From: Kees Monshouwer Date: Tue, 28 Jan 2025 18:33:20 +0100 Subject: [PATCH] auth, check return value of getCatalogMembers() --- pdns/tcpreceiver.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pdns/tcpreceiver.cc b/pdns/tcpreceiver.cc index 12db956bb7..31aaa42ca8 100644 --- a/pdns/tcpreceiver.cc +++ b/pdns/tcpreceiver.cc @@ -582,6 +582,7 @@ namespace { /** do the actual zone transfer. Return 0 in case of error, 1 in case of success */ +// NOLINTNEXTLINE(readability-function-cognitive-complexity) int TCPNameserver::doAXFR(const DNSName &target, std::unique_ptr& q, int outsock) { string logPrefix="AXFR-out zone '"+target.toLogString()+"', client '"+q->getRemoteString()+"', "; @@ -789,7 +790,12 @@ int TCPNameserver::doAXFR(const DNSName &target, std::unique_ptr& q, zrrs.emplace_back(CatalogInfo::getCatalogVersionRecord(target)); vector members; - sd.db->getCatalogMembers(target, members, CatalogInfo::CatalogType::Producer); + if (!sd.db->getCatalogMembers(target, members, CatalogInfo::CatalogType::Producer)) { + g_log << Logger::Error << logPrefix << "getting catalog members failed, aborting AXFR" << endl; + outpacket->setRcode(RCode::ServFail); + sendPacket(outpacket, outsock); + return 0; + } for (const auto& ci : members) { ci.toDNSZoneRecords(target, zrrs); } -- 2.47.2