// cout << "Hit end of database, bummer"<<endl;
cursor.last(key, val);
if (compoundOrdername::getDomainID(key.getNoStripHeader<string_view>()) == domainId) {
- before = co.getQName(key.getNoStripHeader<string_view>()) + zonename.operator const DNSName&();
+ before = compoundOrdername::getQName(key.getNoStripHeader<string_view>()) + zonename.operator const DNSName&();
after = zonename.operator const DNSName&();
}
// else
after = zonename.operator const DNSName&();
return false;
}
- after = co.getQName(key.getNoStripHeader<string_view>()) + zonename.operator const DNSName&();
+ after = compoundOrdername::getQName(key.getNoStripHeader<string_view>()) + zonename.operator const DNSName&();
return true;
}
break;
}
- before = co.getQName(key.getNoStripHeader<string_view>()) + zonename.operator const DNSName&();
+ before = compoundOrdername::getQName(key.getNoStripHeader<string_view>()) + zonename.operator const DNSName&();
// cout<<"Found: "<< before<<endl;
return true;
}
LMDBResourceRecord lrr;
deserializeFromBuffer(val.get<StringView>(), lrr);
if (co.getQType(key.getNoStripHeader<string_view>()).getCode() && (lrr.auth || co.getQType(key.getNoStripHeader<string_view>()).getCode() == QType::NS)) {
- after = co.getQName(key.getNoStripHeader<string_view>()) + zonename.operator const DNSName&();
+ after = compoundOrdername::getQName(key.getNoStripHeader<string_view>()) + zonename.operator const DNSName&();
// cout <<"Found auth ("<<lrr.auth<<") or an NS record "<<after<<", type: "<<co.getQType(key.getNoStripHeader<string_view>()).toString()<<", ttl = "<<lrr.ttl<<endl;
// cout << makeHexDump(val.get<string>()) << endl;
break;
// cout << "We hit the beginning of the zone or database.. now what" << endl;
return false;
}
- before = co.getQName(key.getNoStripHeader<string_view>()) + zonename.operator const DNSName&();
+ before = compoundOrdername::getQName(key.getNoStripHeader<string_view>()) + zonename.operator const DNSName&();
LMDBResourceRecord lrr;
deserializeFromBuffer(val.get<string_view>(), lrr);
// cout<<"And before to "<<before<<", auth = "<<rr.auth<<endl;
try {
if (d_onlyNotify.size()) {
+ // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
B->lookup(QType(QType::NS), di.zone.operator const DNSName&(), di.id);
while (B->get(rr))
nsset.insert(getRR<NSRecordContent>(rr.dr)->getNS());
std::string metaHash;
std::string mapHash;
for (auto& ch : catalogHashes) {
- if (!catalogs.count(ch.first.operator const DNSName&())) {
+ if (catalogs.count(ch.first.operator const DNSName&()) == 0) {
g_log << Logger::Warning << "orphaned member zones found with catalog '" << ch.first << "'" << endl;
continue;
}
}
vector<uint8_t> packet;
- DNSPacketWriter pw(packet, domain.operator const DNSName&(), QType::SOA, 1, Opcode::Notify);
- pw.getHeader()->id = notificationId;
- pw.getHeader()->aa = true;
+ DNSPacketWriter pwriter(packet, domain.operator const DNSName&(), QType::SOA, 1, Opcode::Notify);
+ pwriter.getHeader()->id = notificationId;
+ pwriter.getHeader()->aa = true;
if (tsigkeyname.empty() == false) {
if (!ueber->getTSIGKey(tsigkeyname, tsigalgorithm, tsigsecret64)) {
g_log << Logger::Error << "Unable to Base-64 decode TSIG key '" << tsigkeyname << "' for domain '" << domain << "'" << endl;
return;
}
- addTSIG(pw, trc, tsigkeyname, tsigsecret, "", false);
+ addTSIG(pwriter, trc, tsigkeyname, tsigsecret, "", false);
}
if (sendto(sock, &packet[0], packet.size(), 0, (struct sockaddr*)(&remote), remote.getSocklen()) < 0) {
size_t numDeltas{0};
};
+// NOLINTNEXTLINE(readability-function-cognitive-complexity)
static bool catalogDiff(const DomainInfo& di, vector<CatalogInfo>& fromXFR, vector<CatalogInfo>& fromDB, const string& logPrefix)
{
extern CommunicatorClass Communicator;
vector<DNSRecord> rrset;
{
DNSZoneRecord zrr;
+ // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
di.backend->lookup(QType(g.first.second), g.first.first.operator const DNSName&() + domain.operator const DNSName&(), di.id);
while (di.backend->get(zrr)) {
zrr.dr.d_name.makeUsRelative(domain);
rr.qname += domain.operator const DNSName&();
rr.qname.makeUsLowerCase();
rr.domain_id = zs.domain_id;
- if (!processRecordForZS(domain.operator const DNSName&(), firstNSEC3, rr, zs))
+ if (!processRecordForZS(domain.operator const DNSName&(), firstNSEC3, rr, zs)) {
continue;
+ }
if (dr.d_type == QType::SOA) {
auto sd = getRR<SOARecordContent>(dr);
zs.soa_serial = sd->d_st.serial;
if (zs.nsset.count(shorter) && rr.qtype.getCode() != QType::DS)
rr.auth = false;
- if (shorter == domain.operator const DNSName&()) // stop at apex
+ if (shorter == domain.operator const DNSName&()) { // stop at apex
break;
+ }
} while (shorter.chopOff());
// Insert ents
// Insert empty non-terminals
if (doent && !nonterm.empty()) {
if (zs.isNSEC3) {
+ // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
di.backend->feedEnts3(zs.domain_id, domain.operator const DNSName&(), nonterm, zs.ns3pr, zs.isNarrow);
}
else
SOAData sd;
try {
// Use UeberBackend cache for SOA. Cache gets cleared after AXFR/IXFR.
+ // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
B->lookup(QType(QType::SOA), di.zone.operator const DNSName&(), di.id, nullptr);
DNSZoneRecord zr;
hasSOA = B->get(zr);
else if (hasSOA && theirserial == ourserial) {
uint32_t maxExpire = 0, maxInception = 0;
if (checkSignatures && dk.isPresigned(di.zone)) {
+ // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
B->lookup(QType(QType::RRSIG), di.zone.operator const DNSName&(), di.id); // can't use DK before we are done with this lookup!
DNSZoneRecord zr;
while (B->get(zr)) {
d_soacount = 0;
vector<uint8_t> packet;
- DNSPacketWriter pw(packet, DNSName(domain), QType::AXFR);
- pw.getHeader()->id = dns_random_uint16();
+ DNSPacketWriter pwriter(packet, DNSName(domain), QType::AXFR);
+ pwriter.getHeader()->id = dns_random_uint16();
if (!tsigConf.name.empty()) {
if (tsigConf.algo == DNSName("hmac-md5")) {
}
d_trc.d_time = time(nullptr);
d_trc.d_fudge = 300;
- d_trc.d_origID=ntohs(pw.getHeader()->id);
+ d_trc.d_origID=ntohs(pwriter.getHeader()->id);
d_trc.d_eRcode=0;
- addTSIG(pw, d_trc, tsigConf.name, tsigConf.secret, "", false);
+ addTSIG(pwriter, d_trc, tsigConf.name, tsigConf.secret, "", false);
}
uint16_t replen=htons(packet.size());
if (rr.qtype.getCode())
{
qnames.insert(rr.qname);
- if(rr.qtype.getCode() == QType::NS && rr.qname != zone.operator const DNSName&())
+ if(rr.qtype.getCode() == QType::NS && rr.qname != zone.operator const DNSName&()) {
nsset.insert(rr.qname);
+ }
if(rr.qtype.getCode() == QType::DS)
dsnames.insert(rr.qname);
rrs.emplace_back(rr);
}
#if defined(PDNS_AUTH) // [
-std::ostream & operator<<(std::ostream &os, const ZoneName& d)
+std::ostream & operator<<(std::ostream &ostr, const ZoneName& zone)
{
- return os <<d.toLogString();
+ return ostr << zone.toLogString();
}
-size_t hash_value(ZoneName const& d)
+size_t hash_value(ZoneName const& zone)
{
- return d.hash();
+ return zone.hash();
}
// Sugar while ZoneName::operator DNSName are made explicit. These can't be
DNSName d_name;
};
-size_t hash_value(ZoneName const& d);
+size_t hash_value(ZoneName const& zone);
-std::ostream & operator<<(std::ostream &os, const ZoneName& d);
+std::ostream & operator<<(std::ostream &ostr, const ZoneName& zone);
namespace std {
template <>
struct hash<ZoneName> {
uint32_t getSerialFromPrimary(const ComboAddress& primary, const ZoneName& zone, shared_ptr<const SOARecordContent>& soarecord, const TSIGTriplet& tsig, const uint16_t timeout)
{
vector<uint8_t> packet;
- DNSPacketWriter pw(packet, zone.operator const DNSName&(), QType::SOA);
+ DNSPacketWriter pwriter(packet, zone.operator const DNSName&(), QType::SOA);
if(!tsig.algo.empty()) {
TSIGRecordContent trc;
trc.d_algoName = tsig.algo;
trc.d_time = time(nullptr);
trc.d_fudge = 300;
- trc.d_origID=ntohs(pw.getHeader()->id);
+ trc.d_origID=ntohs(pwriter.getHeader()->id);
trc.d_eRcode=0;
- addTSIG(pw, trc, tsig.name, tsig.secret, "", false);
+ addTSIG(pwriter, trc, tsig.name, tsig.secret, "", false);
}
Socket s(primary.sin4.sin_family, SOCK_DGRAM);
}
#if defined(PDNS_AUTH)
-Logger& Logger::operator<<(const ZoneName& d)
+Logger& Logger::operator<<(const ZoneName& zone)
{
- *this << d.toLogString();
+ *this << zone.toLogString();
return *this;
}
d_lw->registerFunction<DNSPacket, std::unordered_map<unsigned int, DNSRecord>()>("getRRS", [](DNSPacket &p){ std::unordered_map<unsigned int, DNSRecord> ret; unsigned int i = 0; for(const auto &rec: p.getRRS()) { ret.insert({i++, rec.dr}); } return ret;});
d_lw->registerMember<DNSPacket, DNSName>("qdomain", [](const DNSPacket &p) -> DNSName { return p.qdomain; }, [](DNSPacket &p, const DNSName& name) { p.qdomain = name; });
d_lw->registerMember<DNSPacket, DNSName>("qdomainwild", [](const DNSPacket &p) -> DNSName { return p.qdomainwild; }, [](DNSPacket &p, const DNSName& name) { p.qdomainwild = name; });
- d_lw->registerMember<DNSPacket, DNSName>("qdomainzone", [](const DNSPacket &p) -> DNSName { return p.qdomainzone.operator const DNSName&(); }, [](DNSPacket &p, const DNSName& name) { p.qdomainzone = ZoneName(name); });
+ d_lw->registerMember<DNSPacket, DNSName>("qdomainzone", [](const DNSPacket &pkt) -> DNSName { return pkt.qdomainzone.operator const DNSName&(); }, [](DNSPacket &pkt, const DNSName& name) { pkt.qdomainzone = ZoneName(name); });
d_lw->registerMember<DNSPacket, std::string>("d_peer_principal", [](const DNSPacket &p) -> std::string { return p.d_peer_principal; }, [](DNSPacket &p, const std::string &princ) { p.d_peer_principal = princ; });
d_lw->registerMember<DNSPacket, const std::string>("qtype", [](const DNSPacket &p) -> const std::string { return p.qtype.toString(); }, [](DNSPacket &p, const std::string &type) { p.qtype = type; });
ret->push_back(rr);
}
+ // NOLINTNEXTLINE(readability-misleading-indentation): go home, clang-tidy, you're drunk
wildcard=g_wildcarddnsname+subdomain;
haveSomething=true;
}
}
else
#endif
- if (d_doExpandALIAS && rr.dr.d_type == QType::ALIAS) {
+ if (d_doExpandALIAS && rr.dr.d_type == QType::ALIAS) {
// Set the A and AAAA in the NSEC bitmap so aggressive NSEC
// does not falsely deny the type for this name.
// This does NOT add the ALIAS to the bitmap, as that record cannot
}
else
#endif
- if (d_doExpandALIAS && rr.dr.d_type == QType::ALIAS) {
+ if (d_doExpandALIAS && rr.dr.d_type == QType::ALIAS) {
// Set the A and AAAA in the NSEC3 bitmap so aggressive NSEC
// does not falsely deny the type for this name.
// This does NOT add the ALIAS to the bitmap, as that record cannot
g_log << Logger::Error << "Failed to create " << zonename << " for potential autoprimary " << remote << endl;
return RCode::ServFail;
}
+ // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
g_zoneCache.add(zonename, di.id);
if (tsigkeyname.empty() == false) {
vector<string> meta;
return RCode::Refused;
}
vector<string> meta;
- if (B.getDomainMetadata(zonename,"AXFR-MASTER-TSIG",meta) && meta.size() > 0) {
+ if (B.getDomainMetadata(zonename,"AXFR-MASTER-TSIG",meta) && !meta.empty()) {
DNSName expected{meta[0]};
if (p.getTSIGKeyname() != expected) {
g_log<<Logger::Warning<<"Received secure NOTIFY for "<<zonename<<" from "<<p.getRemoteString()<<": expected TSIG key '"<<expected<<"', got '"<<p.getTSIGKeyname()<<"' (Refused)"<<endl;
// Domain verification
//
DomainInfo di;
- if(!B.getDomainInfo(zonename, di, false) || !di.backend) {
+ if(!B.getDomainInfo(zonename, di, false) || di.backend == nullptr) {
if(::arg().mustDo("autosecondary")) {
g_log << Logger::Warning << "Received NOTIFY for " << zonename << " from " << p.getRemoteString() << " for which we are not authoritative, trying autoprimary" << endl;
return tryAutoPrimary(p, p.getTSIGKeyname());
unixDie("Editing file with: '"+cmdline+"', perhaps set EDITOR variable");
}
cmdline.clear();
- ZoneParserTNG zpt(tmpnam, ZoneName(g_rootdnsname));
+ ZoneParserTNG zpt(static_cast<const char *>(tmpnam), ZoneName(g_rootdnsname));
zpt.setMaxGenerateSteps(::arg().asNum("max-generate-steps"));
zpt.setMaxIncludes(::arg().asNum("max-include-depth"));
DNSResourceRecord zrr;
rr.content=tmp;
snprintf(tmp, sizeof(tmp), "r-%u", rnd);
- rr.qname=DNSName(tmp)+zone.operator const DNSName&();
+ rr.qname=DNSName(static_cast<const char *>(tmp))+zone.operator const DNSName&();
DNSZoneRecord dzr;
dzr.dr=DNSRecord(rr);
if(csp.submit(dzr))
vector<DNSKEYRecordContent> keys;
DNSZoneRecord zr;
+ // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
di.backend->lookup(QType(QType::DNSKEY), zone.operator const DNSName&(), di.id );
while(di.backend->get(zr)) {
keys.push_back(*getRR<DNSKEYRecordContent>(zr.dr));
cout<<"Committing"<<endl;
db->commitTransaction();
cout<<"Querying TXT"<<endl;
+ // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
db->lookup(QType(QType::TXT), zone.operator const DNSName&(), di.id);
if(db->get(rrget))
{
// Implements section 3.4.2 of RFC2136
+// NOLINTNEXTLINE(readability-function-cognitive-complexity)
uint PacketHandler::performUpdate(const string &msgPrefix, const DNSRecord *rr, DomainInfo *di, bool isPresigned, bool* narrow, bool* haveNSEC3, NSEC3PARAMRecordContent *ns3pr, bool *updatedSerial) {
QType rrType = QType(rr->d_type);
break;
bool foundShorter = false;
+ // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
di->backend->lookup(QType(QType::ANY), shorter.operator const DNSName&(), di->id);
while (di->backend->get(rec)) {
if (rec.qname == rr->d_name && rec.qtype == QType::DS)
fixDS = true;
- if (shorter.operator const DNSName&() != rr->d_name)
+ if (shorter.operator const DNSName&() != rr->d_name) {
foundShorter = true;
+ }
if (rec.qtype == QType::NS) // are we inserting below a delegate?
auth=false;
}
- if (!foundShorter && auth && shorter.operator const DNSName&() != rr->d_name) // haven't found any record at current level, insert ENT.
+ if (!foundShorter && auth && shorter.operator const DNSName&() != rr->d_name) { // haven't found any record at current level, insert ENT.
insnonterm.insert(shorter.operator const DNSName&());
+ }
if (foundShorter)
break; // if we find a shorter record, we can stop searching
} while(shorter.chopOff());
DLOG(g_log<<msgPrefix<<"Going to fix auth flags below "<<rr->d_name<<endl);
insnonterm.clear(); // No ENT's are needed below delegates (auth=0)
vector<DNSName> qnames;
+ // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
di->backend->listSubZone(ZoneName(rr->d_name), di->id);
while(di->backend->get(rec)) {
if (rec.qtype.getCode() && rec.qtype.getCode() != QType::DS && rr->d_name != rec.qname) // Skip ENT, DS and our already corrected record.
di->backend->lookup(rrType, rr->d_name, di->id);
while(di->backend->get(rec)) {
if (rr->d_class == QClass::ANY) { // 3.4.2.3
- if (rec.qname == di->zone.operator const DNSName&() && (rec.qtype == QType::NS || rec.qtype == QType::SOA)) // Never delete all SOA and NS's
+ if (rec.qname == di->zone.operator const DNSName&() && (rec.qtype == QType::NS || rec.qtype == QType::SOA)) { // Never delete all SOA and NS's
rrset.push_back(rec);
+ }
else
recordsToDelete.push_back(rec);
}
// If we've removed a delegate, we need to reset ordername/auth for some records.
if (rrType == QType::NS && rr->d_name != di->zone.operator const DNSName&()) {
vector<DNSName> belowOldDelegate, nsRecs, updateAuthFlag;
+ // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
di->backend->listSubZone(ZoneName(rr->d_name), di->id);
while (di->backend->get(rec)) {
if (rec.qtype.getCode()) // skip ENT records, they are always auth=false
// on that level. If so, we must insert an ENT record.
// We take extra care here to not 'include' the record that we just deleted. Some backends will still return it as they only reload on a commit.
bool foundDeeper = false, foundOtherWithSameName = false;
+ // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
di->backend->listSubZone(ZoneName(rr->d_name), di->id);
while (di->backend->get(rec)) {
if (rec.qname == rr->d_name && !count(recordsToDelete.begin(), recordsToDelete.end(), rec))
if (nsRRtoDelete.size()) {
vector<DNSResourceRecord> nsRRInZone;
DNSResourceRecord rec;
+ // NOLINTNEXTLINE(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
di.backend->lookup(QType(QType::NS), di.zone.operator const DNSName&(), di.id);
while (di.backend->get(rec)) {
nsRRInZone.push_back(rec);
}
if (serialPermitsIXFR) {
- ZoneName target = zonename;
+ const ZoneName& target = zonename;
TSIGRecordContent trc;
DNSName tsigkeyname;
string tsigsecret;