bool LdapBackend::list_strict(const ZoneName& target, domainid_t domain_id)
{
- if (target.isPartOf(DNSName("in-addr.arpa")) || target.isPartOf(DNSName("ip6.arpa"))) {
+ static const DNSName inaddrarpa("in-addr.arpa");
+ static const DNSName ip6arpa("ip6.arpa");
+ if (target.isPartOf(inaddrarpa) || target.isPartOf(ip6arpa)) {
g_log << Logger::Warning << d_myname << " Request for reverse zone AXFR, but this is not supported in strict mode" << endl;
return false; // AXFR isn't supported in strict mode. Use simple mode and additional PTR records
}
DNSZoneRecord CatalogInfo::getCatalogVersionRecord(const ZoneName& zone)
{
DNSZoneRecord dzr;
- dzr.dr.d_name = DNSName("version") + zone.operator const DNSName&();
+ dzr.dr.d_name = g_versiondnsname + zone.operator const DNSName&();
dzr.dr.d_ttl = 0;
dzr.dr.d_type = QType::TXT;
dzr.dr.setContent(std::make_shared<TXTRecordContent>("2"));
else {
prefix = d_unique;
}
- prefix += DNSName("zones") + zone.operator const DNSName&();
+ prefix += g_zonesdnsname + zone.operator const DNSName&();
DNSZoneRecord dzr;
dzr.dr.d_name = prefix;
dzrs.emplace_back(dzr);
if (!d_coo.empty()) {
- dzr.dr.d_name = DNSName("coo") + prefix;
+ dzr.dr.d_name = g_coodnsname + prefix;
dzr.dr.d_ttl = 0;
dzr.dr.d_type = QType::PTR;
dzr.dr.setContent(std::make_shared<PTRRecordContent>(d_coo));
}
for (const auto& group : d_group) {
- dzr.dr.d_name = DNSName("group") + prefix;
+ dzr.dr.d_name = g_groupdnsname + prefix;
dzr.dr.d_ttl = 0;
dzr.dr.d_type = QType::TXT;
dzr.dr.setContent(std::make_shared<TXTRecordContent>("\"" + group + "\""));
return;
}
TSIGRecordContent trc;
- if (tsigalgorithm.toStringNoDot() == "hmac-md5") {
- trc.d_algoName = DNSName(tsigalgorithm.toStringNoDot() + ".sig-alg.reg.int.");
+ if (tsigalgorithm == g_hmacmd5dnsname) {
+ trc.d_algoName = g_hmacmd5dnsname_long;
}
else {
trc.d_algoName = std::move(tsigalgorithm);
}
}
- else if (rr.qname == DNSName("version") + di.zone.operator const DNSName&() && rr.qtype == QType::TXT) {
+ else if (rr.qname == g_versiondnsname + di.zone.operator const DNSName&() && rr.qtype == QType::TXT) {
if (hasVersion) {
g_log << Logger::Warning << logPrefix << "zone '" << di.zone << "', multiple version records found, aborting" << endl;
return false;
}
}
- else if (rr.qname.isPartOf(DNSName("zones") + di.zone.operator const DNSName&())) {
+ else if (rr.qname.isPartOf(g_zonesdnsname + di.zone.operator const DNSName&())) {
if (rel.empty() && !hasVersion) {
g_log << Logger::Warning << logPrefix << "zone '" << di.zone << "', catalog zone schema version missing, aborting" << endl;
return false;
}
- rel = rr.qname.makeRelative(DNSName("zones") + di.zone.operator const DNSName&());
+ rel = rr.qname.makeRelative(g_zonesdnsname + di.zone.operator const DNSName&());
if (rel.countLabels() == 1 && rr.qtype == QType::PTR) {
if (!unique.empty()) {
}
else if (hasVersion == 2) {
- if (rel == (DNSName("coo") + unique) && rr.qtype == QType::PTR) {
+ if (rel == (g_coodnsname + unique) && rr.qtype == QType::PTR) {
if (!ci.d_coo.empty()) {
g_log << Logger::Warning << logPrefix << "zone '" << di.zone << "', duplicate COO for unique '" << unique << "'" << endl;
zoneInvalid = true;
ci.d_coo = DNSName(rr.content);
}
}
- else if (rel == (DNSName("group") + unique) && rr.qtype == QType::TXT) {
+ else if (rel == (g_groupdnsname + unique) && rr.qtype == QType::TXT) {
std::string content = rr.content;
if (content.length() >= 2 && content.at(0) == '\"' && content.at(content.length() - 1) == '\"') { // TXT pain
content = content.substr(1, content.length() - 2);
pwriter.getHeader()->id = dns_random_uint16();
if (!tsigConf.name.empty()) {
- if (tsigConf.algo == DNSName("hmac-md5")) {
- d_trc.d_algoName = tsigConf.algo + DNSName("sig-alg.reg.int");
+ if (tsigConf.algo == g_hmacmd5dnsname) {
+ d_trc.d_algoName = g_hmacmd5dnsname_long;
}
else {
d_trc.d_algoName = tsigConf.algo;
#include <boost/functional/hash.hpp>
-const DNSName g_rootdnsname("."), g_wildcarddnsname("*");
+const DNSName g_rootdnsname(".");
+const DNSName g_wildcarddnsname("*");
+const DNSName g_coodnsname("coo");
+const DNSName g_groupdnsname("group");
+const DNSName g_versiondnsname("version");
+const DNSName g_zonesdnsname("zones");
+
+const DNSName g_gsstsigdnsname("gss-tsig");
+const DNSName g_hmacmd5dnsname("hmac-md5");
+const DNSName g_hmacmd5dnsname_long("hmac-md5.sig-alg.reg.int");
+const DNSName g_hmacsha1dnsname("hmac-sha1");
+const DNSName g_hmacsha224dnsname("hmac-sha224");
+const DNSName g_hmacsha256dnsname("hmac-sha256");
+const DNSName g_hmacsha384dnsname("hmac-sha384");
+const DNSName g_hmacsha512dnsname("hmac-sha512");
+
const ZoneName g_rootzonename(".");
/* raw storage
return ret;
}
-extern const DNSName g_rootdnsname, g_wildcarddnsname;
+extern const DNSName g_rootdnsname; // .
+extern const DNSName g_wildcarddnsname; // *
+
+extern const DNSName g_coodnsname; // coo
+extern const DNSName g_groupdnsname; // group
+extern const DNSName g_versiondnsname; // version
+extern const DNSName g_zonesdnsname; // zones
+
+extern const DNSName g_gsstsigdnsname; // gss-tsig
+extern const DNSName g_hmacmd5dnsname; // hmac-md5
+extern const DNSName g_hmacmd5dnsname_long; // hmac-md5.sig-alg.reg.int
+extern const DNSName g_hmacsha1dnsname; // hmac-sha1
+extern const DNSName g_hmacsha224dnsname; // hmac-sha224
+extern const DNSName g_hmacsha256dnsname; // hmac-sha256
+extern const DNSName g_hmacsha384dnsname; // hmac-sha384
+extern const DNSName g_hmacsha512dnsname; // hmac-sha512
#if defined(PDNS_AUTH) // [
// ZoneName: this is equivalent to DNSName, but intended to only store zone
bool getTSIGHashEnum(const DNSName& algoName, TSIGHashEnum& algoEnum)
{
- if (algoName == DNSName("hmac-md5.sig-alg.reg.int") || algoName == DNSName("hmac-md5"))
+ if (algoName == g_hmacmd5dnsname_long || algoName == g_hmacmd5dnsname)
algoEnum = TSIG_MD5;
- else if (algoName == DNSName("hmac-sha1"))
+ else if (algoName == g_hmacsha1dnsname)
algoEnum = TSIG_SHA1;
- else if (algoName == DNSName("hmac-sha224"))
+ else if (algoName == g_hmacsha224dnsname)
algoEnum = TSIG_SHA224;
- else if (algoName == DNSName("hmac-sha256"))
+ else if (algoName == g_hmacsha256dnsname)
algoEnum = TSIG_SHA256;
- else if (algoName == DNSName("hmac-sha384"))
+ else if (algoName == g_hmacsha384dnsname)
algoEnum = TSIG_SHA384;
- else if (algoName == DNSName("hmac-sha512"))
+ else if (algoName == g_hmacsha512dnsname)
algoEnum = TSIG_SHA512;
- else if (algoName == DNSName("gss-tsig"))
+ else if (algoName == g_gsstsigdnsname)
algoEnum = TSIG_GSS;
else {
return false;
DNSName getTSIGAlgoName(TSIGHashEnum& algoEnum)
{
switch(algoEnum) {
- case TSIG_MD5: return DNSName("hmac-md5.sig-alg.reg.int.");
- case TSIG_SHA1: return DNSName("hmac-sha1.");
- case TSIG_SHA224: return DNSName("hmac-sha224.");
- case TSIG_SHA256: return DNSName("hmac-sha256.");
- case TSIG_SHA384: return DNSName("hmac-sha384.");
- case TSIG_SHA512: return DNSName("hmac-sha512.");
- case TSIG_GSS: return DNSName("gss-tsig.");
+ case TSIG_MD5: return g_hmacmd5dnsname_long;
+ case TSIG_SHA1: return g_hmacsha1dnsname;
+ case TSIG_SHA224: return g_hmacsha224dnsname;
+ case TSIG_SHA256: return g_hmacsha256dnsname;
+ case TSIG_SHA384: return g_hmacsha384dnsname;
+ case TSIG_SHA512: return g_hmacsha512dnsname;
+ case TSIG_GSS: return g_gsstsigdnsname;
}
throw PDNSException("getTSIGAlgoName does not understand given algorithm, please fix!");
}
TSIGTriplet tsigTriplet;
tsigTriplet.name = *tsigkeyname;
tsigTriplet.algo = tsigContent->d_algoName;
- if (tsigTriplet.algo == DNSName("hmac-md5.sig-alg.reg.int")) {
- tsigTriplet.algo = DNSName("hmac-md5");
+ if (tsigTriplet.algo == g_hmacmd5dnsname_long) {
+ tsigTriplet.algo = g_hmacmd5dnsname;
}
- if (tsigTriplet.algo != DNSName("gss-tsig")) {
+ if (tsigTriplet.algo != g_gsstsigdnsname) {
string secret64;
if (!B.getTSIGKey(*tsigkeyname, tsigTriplet.algo, secret64)) {
g_log << Logger::Error << "Packet for domain '" << packet.qdomain << "' denied: can't find TSIG key with name '" << *tsigkeyname << "' and algorithm '" << tsigTriplet.algo << "'" << endl;
if(!tsigkeyname.empty()) {
// cerr<<"Adding TSIG to notification, key name: '"<<tsigkeyname<<"', algo: '"<<tsigalgorithm<<"', secret: "<<Base64Encode(tsigsecret)<<endl;
TSIGRecordContent trc;
- if (tsigalgorithm == DNSName("hmac-md5"))
- trc.d_algoName = tsigalgorithm + DNSName("sig-alg.reg.int");
+ if (tsigalgorithm == g_hmacmd5dnsname)
+ trc.d_algoName = g_hmacmd5dnsname_long;
else
trc.d_algoName = tsigalgorithm;
trc.d_time = time(nullptr);
input="";
DNSPacketWriter pwtkey(packet, gssctx.getLabel(), QType::TKEY, QClass::ANY);
TKEYRecordContent tkrc;
- tkrc.d_algo = DNSName("gss-tsig.");
+ tkrc.d_algo = g_gsstsigdnsname;
// coverity[store_truncates_time_t]
tkrc.d_inception = time((time_t*)NULL);
tkrc.d_expiration = tkrc.d_inception+15;
if(haveTSIGDetails && !tsigkeyname.empty()) {
string tsig64;
DNSName algorithm=trc.d_algoName;
- if (algorithm == DNSName("hmac-md5.sig-alg.reg.int"))
- algorithm = DNSName("hmac-md5");
- if (algorithm != DNSName("gss-tsig")) {
+ if (algorithm == g_hmacmd5dnsname_long)
+ algorithm = g_hmacmd5dnsname;
+ if (algorithm != g_gsstsigdnsname) {
if(!db.getTSIGKey(tsigkeyname, algorithm, tsig64)) {
g_log<<Logger::Warning<<logPrefix<<"TSIG key not found"<<endl;
return 0;
if(haveTSIGDetails && !tsigkeyname.empty()) {
string tsig64;
DNSName algorithm=trc.d_algoName; // FIXME400: was toLowerCanonic, compare output
- if (algorithm == DNSName("hmac-md5.sig-alg.reg.int"))
- algorithm = DNSName("hmac-md5");
+ if (algorithm == g_hmacmd5dnsname_long)
+ algorithm = g_hmacmd5dnsname;
if (!db.getTSIGKey(tsigkeyname, algorithm, tsig64)) {
g_log << Logger::Error << "TSIG key '" << tsigkeyname << "' for domain '" << target << "' not found" << endl;
return 0;
vector<uint8_t> packet = generateTSIGQuery(qname, tsigName, tsigAlgo, tsigSecret);
- checkTSIG(tsigName, DNSName("hmac-md5."), tsigSecret, packet);
+ checkTSIG(tsigName, g_hmacmd5dnsname, tsigSecret, packet);
}
BOOST_AUTO_TEST_CASE(test_TSIG_bad_key_name) {
if (tkey_in.d_mode == 3) { // establish context
#ifdef ENABLE_GSS_TSIG
if (g_doGssTSIG) {
- if (tkey_in.d_algo == DNSName("gss-tsig.")) {
+ if (tkey_in.d_algo == g_gsstsigdnsname) {
std::vector<std::string> meta;
ZoneName tmpName(name);
do {
if (sign)
{
TSIGRecordContent trc;
- trc.d_algoName = DNSName("gss-tsig");
+ trc.d_algoName = g_gsstsigdnsname;
trc.d_time = inception;
trc.d_fudge = 300;
trc.d_mac = "";
DNSName keyname("pdns-b-aa");
TSIGRecordContent trc;
- trc.d_algoName=DNSName("hmac-md5.sig-alg.reg.int");
+ trc.d_algoName=g_hmacmd5dnsname_long;
trc.d_time=time(0);
trc.d_fudge=300;
trc.d_origID=ntohs(pw.getHeader()->id);
cerr<<"Keyname: '"<<keyname<<"', algo: '"<<trc.d_algoName<<"', key: '"<<Base64Encode(key)<<"'\n";
TSIGTriplet tt;
tt.name=keyname;
- tt.algo=DNSName("hmac-md5");
+ tt.algo=g_hmacmd5dnsname;
tt.secret=key;
AXFRRetriever axfr(dest, ZoneName("b.aa"), tt);
vector<DNSResourceRecord> res;