From: Miod Vallat Date: Mon, 5 May 2025 13:35:06 +0000 (+0200) Subject: Try and build fewer ZoneName objects whenever possible. X-Git-Tag: auth-5.0.0-alpha1~1^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ef4e4a0936fea1f36964d01ce5f71774c02043f9;p=thirdparty%2Fpdns.git Try and build fewer ZoneName objects whenever possible. --- diff --git a/pdns/auth-primarycommunicator.cc b/pdns/auth-primarycommunicator.cc index b45e6e06db..2768b6f2f0 100644 --- a/pdns/auth-primarycommunicator.cc +++ b/pdns/auth-primarycommunicator.cc @@ -169,10 +169,10 @@ void CommunicatorClass::getUpdatedProducers(UeberBackend* B, vector& DNSResourceRecord rr; makeIncreasedSOARecord(sd, "EPOCH", "", rr); - di.backend->startTransaction(ZoneName(sd.qname), UnknownDomainID); + di.backend->startTransaction(sd.zonename, UnknownDomainID); if (!di.backend->replaceRRSet(di.id, rr.qname, rr.qtype, vector(1, rr))) { di.backend->abortTransaction(); - throw PDNSException("backend hosting producer zone '" + sd.qname.toLogString() + "' does not support editing records"); + throw PDNSException("backend hosting producer zone '" + sd.zonename.toLogString() + "' does not support editing records"); } di.backend->commitTransaction(); diff --git a/pdns/dnsbackend.cc b/pdns/dnsbackend.cc index 68a00ef4f2..32145772f3 100644 --- a/pdns/dnsbackend.cc +++ b/pdns/dnsbackend.cc @@ -273,8 +273,8 @@ bool DNSBackend::getSOA(const ZoneName& domain, domainid_t zoneId, SOAData& soaD throw PDNSException("Got non-SOA record when asking for SOA, zone: '" + domain.toLogString() + "'"); } hits++; - soaData.qname = domain.operator const DNSName&().makeLowerCase(); soaData.zonename = domain.makeLowerCase(); + soaData.qname = soaData.zonename.operator const DNSName&(); soaData.ttl = resourceRecord.ttl; soaData.db = this; soaData.domain_id = resourceRecord.domain_id; diff --git a/pdns/ixfrdist.cc b/pdns/ixfrdist.cc index c2d83c6d1b..91f4e8fd94 100644 --- a/pdns/ixfrdist.cc +++ b/pdns/ixfrdist.cc @@ -625,7 +625,8 @@ static ResponseType maybeHandleNotify(const MOADNSParser& mdp, const ComboAddres g_log<insert(ZoneName(mdp.d_qname)); + g_notifiesReceived.lock()->insert(zonename); if (!found->second.notify.empty()) { for (const auto& address : found->second.notify) { g_log << Logger::Debug << logPrefix << "Queuing notification for " << mdp.d_qname << " to " << address.toStringWithPort() << std::endl; - g_notificationQueue.lock()->add(ZoneName(mdp.d_qname), address); + g_notificationQueue.lock()->add(zonename, address); } } return ResponseType::EmptyNoError; @@ -680,12 +681,13 @@ static ResponseType checkQuery(const MOADNSParser& mdp, const ComboAddress& sadd } { - if (g_domainConfigs.find(ZoneName(mdp.d_qname)) == g_domainConfigs.end()) { + ZoneName zonename(mdp.d_qname); + if (g_domainConfigs.find(zonename) == g_domainConfigs.end()) { info_msg.push_back("Domain name '" + mdp.d_qname.toLogString() + "' is not configured for distribution"); ret = ResponseType::RefusedQuery; } else { - const auto zoneInfo = getCurrentZoneInfo(ZoneName(mdp.d_qname)); + const auto zoneInfo = getCurrentZoneInfo(zonename); if (zoneInfo == nullptr) { info_msg.emplace_back("Domain has not been transferred yet"); ret = ResponseType::RefusedQuery; @@ -872,9 +874,10 @@ static bool handleAXFR(int fd, const MOADNSParser& mdp) { until we release it. */ - g_stats.incrementAXFRinQueries(ZoneName(mdp.d_qname)); + ZoneName zonename(mdp.d_qname); + g_stats.incrementAXFRinQueries(zonename); - auto zoneInfo = getCurrentZoneInfo(ZoneName(mdp.d_qname)); + auto zoneInfo = getCurrentZoneInfo(zonename); if (zoneInfo == nullptr) { return false; } @@ -912,9 +915,10 @@ static bool handleIXFR(int fd, const MOADNSParser& mdp, const shared_ptrgetZoneRepresentation(true); rrout.qtype = QType::SOA; @@ -165,7 +165,7 @@ bool makeIncreasedSOARecord(SOAData& sd, const string& increaseKind, const strin DNSZoneRecord makeEditedDNSZRFromSOAData(DNSSECKeeper& dk, const SOAData& sd, DNSResourceRecord::Place place) { SOAData edited = sd; - edited.serial = calculateEditSOA(sd.serial, dk, ZoneName(sd.qname)); + edited.serial = calculateEditSOA(sd.serial, dk, sd.zonename); DNSRecord soa; soa.d_name = sd.qname; diff --git a/pdns/tcpreceiver.cc b/pdns/tcpreceiver.cc index 122eeac97b..8dfa2d9e03 100644 --- a/pdns/tcpreceiver.cc +++ b/pdns/tcpreceiver.cc @@ -1273,7 +1273,7 @@ int TCPNameserver::doIXFR(std::unique_ptr& q, int outsock) } } - serialPermitsIXFR = !rfc1982LessThan(serial, calculateEditSOA(sd.serial, dk, ZoneName(sd.qname))); + serialPermitsIXFR = !rfc1982LessThan(serial, calculateEditSOA(sd.serial, dk, sd.zonename)); } if (serialPermitsIXFR) { diff --git a/pdns/test-ueberbackend_cc.cc b/pdns/test-ueberbackend_cc.cc index 0225b76dbc..87dc7ef4e6 100644 --- a/pdns/test-ueberbackend_cc.cc +++ b/pdns/test-ueberbackend_cc.cc @@ -270,7 +270,8 @@ public: fillSOAData(range.first->d_content, *soadata); soadata->ttl = range.first->d_ttl; - soadata->qname = best.operator const DNSName&(); + soadata->zonename = best; + soadata->qname = soadata->zonename.operator const DNSName&(); soadata->domain_id = static_cast(zoneId); return true; } @@ -1008,7 +1009,7 @@ BOOST_AUTO_TEST_CASE(test_child_zone) { // test getAuth() for DS SOAData sd; BOOST_REQUIRE(ub.getAuth(ZoneName("powerdns.com."), QType::DS, &sd)); - BOOST_CHECK_EQUAL(sd.qname.toString(), "com."); + BOOST_CHECK_EQUAL(sd.zonename.toString(), "com."); BOOST_CHECK_EQUAL(sd.domain_id, 1); } @@ -1016,7 +1017,7 @@ BOOST_AUTO_TEST_CASE(test_child_zone) { // test getAuth() for A SOAData sd; BOOST_REQUIRE(ub.getAuth(ZoneName("powerdns.com."), QType::A, &sd)); - BOOST_CHECK_EQUAL(sd.qname.toString(), "powerdns.com."); + BOOST_CHECK_EQUAL(sd.zonename.toString(), "powerdns.com."); BOOST_CHECK_EQUAL(sd.domain_id, 2); } @@ -1068,7 +1069,7 @@ BOOST_AUTO_TEST_CASE(test_multi_backends_best_soa) { // test getAuth() SOAData sd; BOOST_REQUIRE(ub.getAuth(ZoneName("2.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa."), QType::PTR, &sd)); - BOOST_CHECK_EQUAL(sd.qname.toString(), "d.0.1.0.0.2.ip6.arpa."); + BOOST_CHECK_EQUAL(sd.zonename.toString(), "d.0.1.0.0.2.ip6.arpa."); BOOST_CHECK_EQUAL(sd.domain_id, 1); // check that at most one auth lookup occurred to this backend (O with caching enabled) diff --git a/pdns/ueberbackend.cc b/pdns/ueberbackend.cc index 2d2242aa81..4d0c785a58 100644 --- a/pdns/ueberbackend.cc +++ b/pdns/ueberbackend.cc @@ -422,8 +422,8 @@ bool UeberBackend::fillSOAFromZoneRecord(ZoneName& shorter, const domainid_t zon } // Fill soaData. - soaData->qname = zoneRecord.dr.d_name.makeLowerCase(); soaData->zonename = shorter.makeLowerCase(); + soaData->qname = soaData->zonename.operator const DNSName&(); try { fillSOAData(zoneRecord, *soaData); @@ -457,8 +457,8 @@ UeberBackend::CacheResult UeberBackend::fillSOAFromCache(SOAData* soaData, ZoneN fillSOAData(d_answers[0], *soaData); soaData->db = backends.size() == 1 ? backends.begin()->get() : nullptr; - soaData->qname = shorter.operator const DNSName&().makeLowerCase(); soaData->zonename = shorter.makeLowerCase(); + soaData->qname = soaData->zonename.operator const DNSName&(); } else if (cacheResult == CacheResult::NegativeMatch && d_negcache_ttl != 0U) { DLOG(g_log << Logger::Error << "has neg cache entry: " << shorter << endl); diff --git a/pdns/ws-api.cc b/pdns/ws-api.cc index 8edab43635..d57c39677a 100644 --- a/pdns/ws-api.cc +++ b/pdns/ws-api.cc @@ -343,7 +343,11 @@ ZoneName apiZoneIdToName(const string& identifier) string apiZoneNameToId(const ZoneName& dname) { - string name = dname.toString(); + return apiNameToId(dname.toString()); +} + +string apiNameToId(const string& name) +{ ostringstream outputStringStream; for (char iter : name) { diff --git a/pdns/ws-api.hh b/pdns/ws-api.hh index 76f1ef4077..5fe8c132c9 100644 --- a/pdns/ws-api.hh +++ b/pdns/ws-api.hh @@ -34,6 +34,7 @@ void apiServerStatistics(HttpRequest* req, HttpResponse* resp); // helpers ZoneName apiZoneIdToName(const string& identifier); string apiZoneNameToId(const ZoneName& name); +string apiNameToId(const std::string& name); void apiCheckNameAllowedCharacters(std::string_view name); void apiCheckQNameAllowedCharacters(std::string_view name); DNSName apiNameToDNSName(const string& name); diff --git a/pdns/ws-auth.cc b/pdns/ws-auth.cc index f8557b12f5..825fc5e32f 100644 --- a/pdns/ws-auth.cc +++ b/pdns/ws-auth.cc @@ -431,13 +431,13 @@ static void fillZone(UeberBackend& backend, const ZoneName& zonename, HttpRespon Json::array tsig_primary_keys; for (const auto& keyname : tsig_primary) { - tsig_primary_keys.emplace_back(apiZoneNameToId(ZoneName(keyname))); + tsig_primary_keys.emplace_back(apiNameToId(keyname)); } doc["master_tsig_key_ids"] = tsig_primary_keys; Json::array tsig_secondary_keys; for (const auto& keyname : tsig_secondary) { - tsig_secondary_keys.emplace_back(apiZoneNameToId(ZoneName(keyname))); + tsig_secondary_keys.emplace_back(apiNameToId(keyname)); } doc["slave_tsig_key_ids"] = tsig_secondary_keys; @@ -1648,7 +1648,7 @@ static Json::object makeJSONTSIGKey(const DNSName& keyname, const DNSName& algo, { Json::object tsigkey = { {"name", keyname.toStringNoDot()}, - {"id", apiZoneNameToId(ZoneName(keyname))}, + {"id", apiNameToId(keyname.toString())}, {"algorithm", algo.toStringNoDot()}, {"key", content}, {"type", "TSIGKey"}};