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<DNSResourceRecord>(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();
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;
g_log<<Logger::Info<<logPrefix<<"NOTIFY for "<<mdp.d_qname<<"|"<<QType(mdp.d_qtype).toString()<<" "<< Opcode::to_s(mdp.d_header.opcode) <<" from "<<saddr.toStringWithPort()<<endl;
- auto found = g_domainConfigs.find(ZoneName(mdp.d_qname));
+ ZoneName zonename(mdp.d_qname);
+ auto found = g_domainConfigs.find(zonename);
if (found == g_domainConfigs.end()) {
g_log<<Logger::Info<<("Domain name '" + mdp.d_qname.toLogString() + "' is not configured for notification")<<endl;
return ResponseType::RefusedQuery;
}
if (primaryFound) {
- g_notifiesReceived.lock()->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;
}
{
- 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;
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;
}
until we release it.
*/
- g_stats.incrementIXFRinQueries(ZoneName(mdp.d_qname));
+ ZoneName zonename(mdp.d_qname);
+ g_stats.incrementIXFRinQueries(zonename);
- auto zoneInfo = getCurrentZoneInfo(ZoneName(mdp.d_qname));
+ auto zoneInfo = getCurrentZoneInfo(zonename);
if (zoneInfo == nullptr) {
return false;
}
if (increaseKind.empty())
return false;
- sd.serial = calculateIncreaseSOA(sd.serial, increaseKind, editKind, ZoneName(sd.qname));
+ sd.serial = calculateIncreaseSOA(sd.serial, increaseKind, editKind, sd.zonename);
rrout.qname = sd.qname;
rrout.content = makeSOAContent(sd)->getZoneRepresentation(true);
rrout.qtype = QType::SOA;
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;
}
}
- serialPermitsIXFR = !rfc1982LessThan(serial, calculateEditSOA(sd.serial, dk, ZoneName(sd.qname)));
+ serialPermitsIXFR = !rfc1982LessThan(serial, calculateEditSOA(sd.serial, dk, sd.zonename));
}
if (serialPermitsIXFR) {
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<int>(zoneId);
return true;
}
// 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);
}
// 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);
}
// 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)
}
// Fill soaData.
- soaData->qname = zoneRecord.dr.d_name.makeLowerCase();
soaData->zonename = shorter.makeLowerCase();
+ soaData->qname = soaData->zonename.operator const DNSName&();
try {
fillSOAData(zoneRecord, *soaData);
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);
string apiZoneNameToId(const ZoneName& dname)
{
- string name = dname.toString();
+ return apiNameToId(dname.toString());
+}
+
+string apiNameToId(const string& name)
+{
ostringstream outputStringStream;
for (char iter : name) {
// 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);
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;
{
Json::object tsigkey = {
{"name", keyname.toStringNoDot()},
- {"id", apiZoneNameToId(ZoneName(keyname))},
+ {"id", apiNameToId(keyname.toString())},
{"algorithm", algo.toStringNoDot()},
{"key", content},
{"type", "TSIGKey"}};