DNSZoneRecord rr;
DNSName subdomain(target);
do {
- if(subdomain == d_sd.qname) // stop at SOA
+ if(subdomain == d_sd.qname()) { // stop at SOA
break;
+ }
B.lookup(QType(QType::NS), subdomain, d_sd.domain_id, &p);
while(B.get(rr)) {
ret.push_back(rr); // this used to exclude auth NS records for some reason
}
- if(!ret.empty())
+ if(!ret.empty()) {
return ret;
+ }
} while( subdomain.chopOff() ); // 'www.powerdns.org' -> 'powerdns.org' -> 'org' -> ''
return ret;
}
DNSName prefix;
DNSName subdomain(target);
do {
- DLOG(g_log<<"Attempting DNAME lookup for "<<subdomain<<", d_sd.qname="<<d_sd.qname<<endl);
+ DLOG(g_log<<"Attempting DNAME lookup for "<<subdomain<<", d_sd.qname()="<<d_sd.qname()<<endl);
B.lookup(QType(QType::DNAME), subdomain, d_sd.domain_id, &p);
while(B.get(rr)) {
target = getRR<CNAMERecordContent>(rr.dr)->getTarget();
ret.push_back(rr);
}
- if(!ret.empty())
+ if(!ret.empty()) {
return;
- if(subdomain.countLabels())
+ }
+ if(subdomain.countLabels()) {
prefix.appendRawLabel(subdomain.getRawLabels()[0]); // XXX DNSName pain this feels wrong
- if(subdomain == d_sd.qname) // stop at SOA
+ }
+ if(subdomain == d_sd.qname()) { // stop at SOA
break;
+ }
} while( subdomain.chopOff() ); // 'www.powerdns.org' -> 'powerdns.org' -> 'org' -> ''
return;
// noCache=true;
DLOG(g_log<<"Executing Lua: '"<<rec->getCode()<<"'"<<endl);
try {
- auto recvec=luaSynth(rec->getCode(), target, rr, d_sd.qname, p, rec->d_type, s_LUA);
+ auto recvec=luaSynth(rec->getCode(), target, rr, d_sd.qname(), p, rec->d_type, s_LUA);
for (const auto& r : recvec) {
rr.dr.d_type = rec->d_type; // might be CNAME
rr.dr.setContent(r);
haveSomething=true;
}
- if ( subdomain == d_sd.qname || haveSomething ) // stop at SOA or result
+ if ( subdomain == d_sd.qname() || haveSomething ) { // stop at SOA or result
break;
+ }
B.lookup(QType(QType::ANY), subdomain, d_sd.domain_id, &p);
if (B.get(rr)) {
DNSZoneRecord rr;
done = true;
- if(!ret.isPartOf(d_sd.qname)) {
+ if(!ret.isPartOf(d_sd.qname())) {
continue;
}
B.lookup(QType(QType::SRV), content, d_sd.domain_id, &p);
while(B.get(dzr)) {
content=getRR<SRVRecordContent>(dzr.dr)->d_target;
- if(content.isPartOf(d_sd.qname)) {
+ if(content.isPartOf(d_sd.qname())) {
lookup.emplace(content);
}
dzr.dr.d_place=DNSResourceRecord::ADDITIONAL;
default:
continue;
}
- if(!content.empty() && content.isPartOf(d_sd.qname)) {
+ if(!content.empty() && content.isPartOf(d_sd.qname())) {
lookup.emplace(content);
}
}
nrc.set(QType::NSEC);
nrc.set(QType::RRSIG);
- if(d_sd.qname == name) {
+ if(d_sd.qname() == name) {
nrc.set(QType::SOA); // 1dfd8ad SOA can live outside the records table
if(!d_dk.isPresigned(d_sd.zonename)) {
auto keyset = d_dk.getKeys(d_sd.zonename);
DNSZoneRecord rr;
if(!name.empty()) {
- if (d_sd.qname == name) {
+ if (d_sd.qname() == name) {
n3rc.set(QType::SOA); // 1dfd8ad SOA can live outside the records table
n3rc.set(QType::NSEC3PARAM);
if(!d_dk.isPresigned(d_sd.zonename)) {
n3rc.set(QType::RRSIG);
}
- rr.dr.d_name = DNSName(toBase32Hex(namehash))+d_sd.qname;
+ rr.dr.d_name = DNSName(toBase32Hex(namehash))+d_sd.qname();
rr.dr.d_ttl = d_sd.getNegativeTTL();
rr.dr.d_type=QType::NSEC3;
rr.dr.setContent(std::make_shared<NSEC3RecordContent>(std::move(n3rc)));
void PacketHandler::addNSEC3(DNSPacket& p, std::unique_ptr<DNSPacket>& r, const DNSName& target, const DNSName& wildcard, const NSEC3PARAMRecordContent& ns3rc, bool narrow, int mode)
{
- DLOG(g_log<<"addNSEC3() mode="<<mode<<" auth="<<d_sd.qname<<" target="<<target<<" wildcard="<<wildcard<<endl);
+ DLOG(g_log<<"addNSEC3() mode="<<mode<<" auth="<<d_sd.qname()<<" target="<<target<<" wildcard="<<wildcard<<endl);
if (d_sd.db == nullptr) {
if(!B.getSOAUncached(d_sd.zonename, d_sd)) {
// zone in a second, DNSSEC-capable backend, which caused d_dnssec to
// be set to true. While it would be nice to support such a zone
// configuration, we don't. Log a warning and skip DNSSEC processing.
- g_log << Logger::Notice << "Backend for zone '" << d_sd.qname << "' does not support DNSSEC operation, not adding NSEC3 hashes" << endl;
+ g_log << Logger::Notice << "Backend for zone '" << d_sd.qname() << "' does not support DNSSEC operation, not adding NSEC3 hashes" << endl;
return;
}
bool doBreak = false;
DNSZoneRecord rr;
- while( closest.chopOff() && (closest != d_sd.qname)) { // stop at SOA
+ while( closest.chopOff() && (closest != d_sd.qname())) { // stop at SOA
B.lookup(QType(QType::ANY), closest, d_sd.domain_id, &p);
while(B.get(rr))
if (rr.auth)
void PacketHandler::addNSEC(DNSPacket& /* p */, std::unique_ptr<DNSPacket>& r, const DNSName& target, const DNSName& wildcard, int mode)
{
- DLOG(g_log<<"addNSEC() mode="<<mode<<" auth="<<d_sd.qname<<" target="<<target<<" wildcard="<<wildcard<<endl);
+ DLOG(g_log<<"addNSEC() mode="<<mode<<" auth="<<d_sd.qname()<<" target="<<target<<" wildcard="<<wildcard<<endl);
if (d_sd.db == nullptr) {
if(!B.getSOAUncached(d_sd.zonename, d_sd)) {
// zone in a second, DNSSEC-capable backend, which caused d_dnssec to
// be set to true. While it would be nice to support such a zone
// configuration, we don't. Log a warning and skip DNSSEC processing.
- g_log << Logger::Notice << "Backend for zone '" << d_sd.qname << "' does not support DNSSEC operation, not adding NSEC records" << endl;
+ g_log << Logger::Notice << "Backend for zone '" << d_sd.qname() << "' does not support DNSSEC operation, not adding NSEC records" << endl;
return;
}
void PacketHandler::completeANYRecords(DNSPacket& p, std::unique_ptr<DNSPacket>& r, const DNSName &target)
{
addNSECX(p, r, target, DNSName(), 5);
- if(d_sd.qname == p.qdomain) {
+ if(d_sd.qname() == p.qdomain) {
if(!d_dk.isPresigned(d_sd.zonename)) {
addDNSKEY(p, r);
addCDNSKEY(p, r);
}
return true;
}
- DLOG(g_log<<Logger::Error<<"We have authority, zone='"<<d_sd.qname<<"', id="<<d_sd.domain_id<<", zonename="<<d_sd.zonename<<endl);
+ DLOG(g_log<<Logger::Error<<"We have authority, zone='"<<d_sd.qname()<<"', id="<<d_sd.domain_id<<", zonename="<<d_sd.zonename<<endl);
if (!retargeted) {
state.r->qdomainzone = d_sd.zonename;
- } else if (!d_doResolveAcrossZones && state.r->qdomainzone.operator const DNSName&() != d_sd.qname) {
+ } else if (!d_doResolveAcrossZones && state.r->qdomainzone.operator const DNSName&() != d_sd.qname()) {
// We are following a retarget outside the initial zone. Config asked us not to do that.
return true;
}
d_dnssec=(pkt.d_dnssecOk && d_dk.isSecuredZone(d_sd.zonename));
state.doSigs |= d_dnssec;
- if(d_sd.qname==pkt.qdomain) {
+ if(d_sd.qname()==pkt.qdomain) {
if(!d_dk.isPresigned(d_sd.zonename)) {
switch (pkt.qtype.getCode()) {
case QType::DNSKEY:
}
}
- if(pkt.qtype.getCode() == QType::SOA && d_sd.qname==pkt.qdomain) {
+ if(pkt.qtype.getCode() == QType::SOA && d_sd.qname()==pkt.qdomain) {
zrr=makeEditedDNSZRFromSOAData(d_dk, d_sd);
state.r->addRecord(std::move(zrr));
return true;
if(rec->d_type == QType::CNAME || rec->d_type == pkt.qtype.getCode() || (pkt.qtype.getCode() == QType::ANY && rec->d_type != QType::RRSIG)) {
state.noCache=true;
try {
- auto recvec=luaSynth(rec->getCode(), state.target, zrr, d_sd.qname, pkt, rec->d_type, s_LUA);
+ auto recvec=luaSynth(rec->getCode(), state.target, zrr, d_sd.qname(), pkt, rec->d_type, s_LUA);
if(!recvec.empty()) {
for (const auto& r_it : recvec) {
zrr.dr.d_type = rec->d_type; // might be CNAME
weDone=true;
}
// the line below fakes 'unauth NS' for delegations for non-DNSSEC backends.
- if((zrr.dr.d_type == pkt.qtype.getCode() && !zrr.auth) || (zrr.dr.d_type == QType::NS && (!zrr.auth || !(d_sd.qname==zrr.dr.d_name)))) {
+ if((zrr.dr.d_type == pkt.qtype.getCode() && !zrr.auth) || (zrr.dr.d_type == QType::NS && (!zrr.auth || !(d_sd.qname()==zrr.dr.d_name)))) {
weHaveUnauth=true;
}
}
/* Add in SOA if required */
- if(state.target==d_sd.qname) {
+ if(state.target==d_sd.qname()) {
zrr=makeEditedDNSZRFromSOAData(d_dk, d_sd);
rrset.push_back(zrr);
}
}
// check whether this could be fixed easily
// if (*(zrr.dr.d_name.rbegin()) == '.') {
- // g_log<<Logger::Error<<"Should not get here ("<<pkt.qdomain<<"|"<<pkt.qtype.toString()<<"): you have a trailing dot, this could be the problem (or run pdnsutil rectify-zone " <<d_sd.qname<<")"<<endl;
+ // g_log<<Logger::Error<<"Should not get here ("<<pkt.qdomain<<"|"<<pkt.qtype.toString()<<"): you have a trailing dot, this could be the problem (or run pdnsutil rectify-zone " <<d_sd.qname()<<")"<<endl;
// } else {
- g_log<<Logger::Error<<"Should not get here ("<<pkt.qdomain<<"|"<<pkt.qtype.toString()<<"): please run pdnsutil rectify-zone "<<d_sd.qname<<endl;
+ g_log<<Logger::Error<<"Should not get here ("<<pkt.qdomain<<"|"<<pkt.qtype.toString()<<"): please run pdnsutil rectify-zone "<<d_sd.qname()<<endl;
// }
}
else {
// Fill soaData.
soaData->zonename = shorter.makeLowerCase();
- soaData->qname = soaData->zonename.operator const DNSName&();
try {
fillSOAData(zoneRecord, *soaData);
soaData->db = backends.size() == 1 ? backends.begin()->get() : nullptr;
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);
auto wirelength = shorter.operator const DNSName&().wirelength();
if (bestMatch->first < wirelength) {
- DLOG(g_log << Logger::Error << "skipped, we already found a shorter best match in this backend: " << bestMatch->second.qname << endl);
+ DLOG(g_log << Logger::Error << "skipped, we already found a shorter best match in this backend: " << bestMatch->second.qname() << endl);
continue;
}
if (bestMatch->first == wirelength) {
- DLOG(g_log << Logger::Error << "use shorter best match: " << bestMatch->second.qname << endl);
+ DLOG(g_log << Logger::Error << "use shorter best match: " << bestMatch->second.qname() << endl);
*soaData = bestMatch->second;
break;
}
DLOG(g_log << Logger::Error << "lookup: " << shorter << endl);
if ((*backend)->getAuth(shorter, soaData)) {
- DLOG(g_log << Logger::Error << "got: " << soaData->qname << endl);
+ DLOG(g_log << Logger::Error << "got: " << soaData->zonename << endl);
- if (!soaData->qname.empty() && !shorter.isPartOf(soaData->qname)) {
- throw PDNSException("getAuth() returned an SOA for the wrong zone. Zone '" + soaData->qname.toLogString() + "' is not part of '" + shorter.toLogString() + "'");
+ if (!soaData->qname().empty() && !shorter.isPartOf(soaData->qname())) {
+ throw PDNSException("getAuth() returned an SOA for the wrong zone. Zone '" + soaData->qname().toLogString() + "' is not part of '" + shorter.toLogString() + "'");
}
- bestMatch->first = soaData->qname.wirelength();
+ bestMatch->first = soaData->qname().wirelength();
bestMatch->second = *soaData;
- if (soaData->qname == shorter.operator const DNSName&()) {
+ if (soaData->qname() == shorter.operator const DNSName&()) {
break;
}
}
static bool foundTarget(const ZoneName& target, const ZoneName& shorter, const QType& qtype, [[maybe_unused]] SOAData* soaData, const bool found)
{
if (found == (qtype == QType::DS) || target != shorter) {
- DLOG(g_log << Logger::Error << "found: " << soaData->qname << endl);
+ DLOG(g_log << Logger::Error << "found: " << soaData->qname() << endl);
return true;
}
- DLOG(g_log << Logger::Error << "chasing next: " << soaData->qname << endl);
+ DLOG(g_log << Logger::Error << "chasing next: " << soaData->qname() << endl);
return false;
}
}
if (d_cache_ttl != 0) {
- DLOG(g_log << Logger::Error << "add pos cache entry: " << soaData->qname << endl);
+ DLOG(g_log << Logger::Error << "add pos cache entry: " << soaData->qname() << endl);
d_question.qtype = QType::SOA;
- d_question.qname = soaData->qname;
+ d_question.qname = soaData->qname();
d_question.zoneId = zoneId;
DNSZoneRecord resourceRecord;
- resourceRecord.dr.d_name = soaData->qname;
+ resourceRecord.dr.d_name = soaData->qname();
resourceRecord.dr.d_type = QType::SOA;
resourceRecord.dr.setContent(makeSOAContent(*soaData));
resourceRecord.dr.d_ttl = soaData->ttl;
continue;
}
if (backend->getSOA(domain, UnknownDomainID, soaData)) {
- if (domain.operator const DNSName&() != soaData.qname) {
- throw PDNSException("getSOA() returned an SOA for the wrong zone. Question: '" + domain.toLogString() + "', answer: '" + soaData.qname.toLogString() + "'");
+ if (domain.operator const DNSName&() != soaData.qname()) {
+ throw PDNSException("getSOA() returned an SOA for the wrong zone. Question: '" + domain.toLogString() + "', answer: '" + soaData.qname().toLogString() + "'");
}
if (d_cache_ttl != 0U) {
DNSZoneRecord zoneRecord;
- zoneRecord.dr.d_name = soaData.qname;
+ zoneRecord.dr.d_name = soaData.qname();
zoneRecord.dr.d_type = QType::SOA;
zoneRecord.dr.setContent(makeSOAContent(soaData));
zoneRecord.dr.d_ttl = soaData.ttl;