static_assert(sizeof(EDNS0Record) == sizeof(dr.d_ttl), "sizeof(EDNS0Record) must match sizeof(DNSRecord.d_ttl)");
memcpy(&dr.d_ttl, &stuff, sizeof(stuff));
dr.d_ttl=ntohl(dr.d_ttl);
- dr.d_name=DNSName(".");
+ dr.d_name=g_rootdnsname;
dr.d_type = QType::OPT;
dr.d_class=udpsize;
dr.d_place=DNSResourceRecord::ADDITIONAL;
bool sharedDNSSECCompare(const shared_ptr<DNSRecordContent>& a, const shared_ptr<DNSRecordContent>& b)
{
- return a->serialize(DNSName("."), true, true) < b->serialize(DNSName("."), true, true);
+ return a->serialize(g_rootdnsname, true, true) < b->serialize(g_rootdnsname, true, true);
}
/**
sort(signRecords.begin(), signRecords.end(), sharedDNSSECCompare);
string toHash;
- toHash.append(const_cast<RRSIGRecordContent&>(rrc).serialize(DNSName("."), true, true));
+ toHash.append(const_cast<RRSIGRecordContent&>(rrc).serialize(g_rootdnsname, true, true));
toHash.resize(toHash.size() - rrc.d_signature.length()); // chop off the end, don't sign the signature!
string nameToHash(qname.toDNSStringLC());
uint32_t ttl=htonl(rrc.d_originalttl);
toHash.append((char*)&ttl, 4);
// for NSEC signatures, we should not lowercase the rdata section
- string rdata=add->serialize(DNSName("."), true, (add->getType() == QType::NSEC) ? false : true); // RFC 6840, 5.1
+ string rdata=add->serialize(g_rootdnsname, true, (add->getType() == QType::NSEC) ? false : true); // RFC 6840, 5.1
tmp=htons(rdata.length());
toHash.append((char*)&tmp, 2);
toHash.append(rdata);
ttl=ntohl(ttl); // will be reversed later on
- startRecord(DNSName("."), QType::OPT, ttl, udpsize, DNSResourceRecord::ADDITIONAL, false);
+ startRecord(g_rootdnsname, QType::OPT, ttl, udpsize, DNSResourceRecord::ADDITIONAL, false);
for(optvect_t::const_iterator iter = options.begin(); iter != options.end(); ++iter) {
xfr16BitInt(iter->first);
xfr16BitInt(iter->second.length());
}
while(s.chopOff()){
- iter = polmap.find(DNSName("*")+s);
+ iter = polmap.find(g_wildcarddnsname+s);
if(iter != polmap.end()) {
pol=iter->second;
return true;
for(const auto &n: namestocheck)
{
proveOrDeny(nsec3s, n, nsec3salt, nsec3iters, proven, denied);
- proveOrDeny(nsec3s, DNSName("*")+n, nsec3salt, nsec3iters, proven, denied);
+ proveOrDeny(nsec3s, g_wildcarddnsname+n, nsec3salt, nsec3iters, proven, denied);
}
if(names.count(qname))
{
cout<<"next closer ("<<nextcloser.toString()<<") NOT denied"<<endl;
}
- DNSName wcplusencloser=DNSName("*")+encloser;
+ DNSName wcplusencloser=g_wildcarddnsname+encloser;
if(denied.count(wcplusencloser))
{
cout<<"wildcard at encloser ("<<wcplusencloser.toString()<<") is denied correctly"<<endl;
wildcard=subdomain;
while( subdomain.chopOff() && !haveSomething ) {
if (subdomain.empty()) {
- B.lookup(QType(QType::ANY), DNSName("*"), p, sd.domain_id);
+ B.lookup(QType(QType::ANY), g_wildcarddnsname, p, sd.domain_id);
} else {
- B.lookup(QType(QType::ANY), DNSName("*")+subdomain, p, sd.domain_id);
+ B.lookup(QType(QType::ANY), g_wildcarddnsname+subdomain, p, sd.domain_id);
}
while(B.get(rr)) {
if(rr.qtype == p->qtype || rr.qtype.getCode() == QType::CNAME || (p->qtype.getCode() == QType::ANY && rr.qtype.getCode() != QType::RRSIG))
ret->push_back(rr);
- wildcard=DNSName("*")+subdomain;
+ wildcard=g_wildcarddnsname+subdomain;
haveSomething=true;
}
// wildcard denial
if (mode == 2 || mode == 4) {
- unhashed=DNSName("*")+closest;
+ unhashed=g_wildcarddnsname+closest;
hashed=hashQNameWithSalt(ns3rc, unhashed);
DLOG(L<<"3 hash: "<<toBase32Hex(hashed)<<" "<<unhashed<<endl);
sr.setNoCache();
int res=-1;
try {
- res=sr.beginResolve(DNSName("."), QType(QType::NS), 1, ret);
+ res=sr.beginResolve(g_rootdnsname, QType(QType::NS), 1, ret);
}
catch(PDNSException& e)
{
unixDie("Editing file with: '"+cmdline+"', perhaps set EDITOR variable");
}
cmdline.clear();
- ZoneParserTNG zpt(tmpnam, DNSName("."));
+ ZoneParserTNG zpt(tmpnam, g_rootdnsname);
map<pair<DNSName,uint16_t>, vector<DNSRecord> > grouped;
while(zpt.get(rr)) {
try {
{
for (const auto &dsRecord : rootDSs) {
auto ds=unique_ptr<DSRecordContent>(dynamic_cast<DSRecordContent*>(DSRecordContent::make(dsRecord)));
- dsAnchors[DNSName(".")].insert(*ds);
+ dsAnchors[g_rootdnsname].insert(*ds);
}
}
if(::arg()["hint-file"].empty()) {
DNSRecord arr, aaaarr, nsrr;
- nsrr.d_name=DNSName(".");
+ nsrr.d_name=g_rootdnsname;
arr.d_type=QType::A;
aaaarr.d_type=QType::AAAA;
nsrr.d_type=QType::NS;
}
}
}
- t_RC->replace(time(0), DNSName("."), QType(QType::NS), nsset, vector<std::shared_ptr<RRSIGRecordContent>>(), true); // and stuff in the cache (auth)
+ t_RC->replace(time(0), g_rootdnsname, QType(QType::NS), nsset, vector<std::shared_ptr<RRSIGRecordContent>>(), true); // and stuff in the cache (auth)
}
static void makeNameToIPZone(SyncRes::domainmap_t* newMap, const DNSName& hostname, const string& ip)
else if(target.isRoot()) {
// cerr<<"Wants NXDOMAIN for "<<dr.d_name<<": ";
pol.d_kind = DNSFilterEngine::PolicyKind::NXDOMAIN;
- } else if(target==DNSName("*")) {
+ } else if(target==g_wildcarddnsname) {
// cerr<<"Wants NODATA for "<<dr.d_name<<": ";
pol.d_kind = DNSFilterEngine::PolicyKind::NODATA;
}
st.serial=di.serial;
DNSRecord dr;
- dr.d_content = std::make_shared<SOARecordContent>(DNSName("."), DNSName("."), st);
+ dr.d_content = std::make_shared<SOARecordContent>(g_rootdnsname, g_rootdnsname, st);
auto deltas = getIXFRDeltas(remote, domain, dr, tt, laddr.sin4.sin_family ? &laddr : 0, ((size_t) ::arg().asNum("xfr-max-received-mbytes")) * 1024 * 1024);
zs.numDeltas=deltas.size();
// cout<<"Got "<<deltas.size()<<" deltas from serial "<<di.serial<<", applying.."<<endl;
DNSName wcarddomain(qname);
while(wcarddomain != iter->first && wcarddomain.chopOff()) {
LOG(prefix<<qname<<": trying '*."<<wcarddomain<<"' in "<<authdomain<<endl);
- range=iter->second.d_records.equal_range(boost::make_tuple(DNSName("*")+wcarddomain));
+ range=iter->second.d_records.equal_range(boost::make_tuple(g_wildcarddnsname+wcarddomain));
if(range.first==range.second)
continue;
t_sstorage->nsSpeeds[*tns].submit(*remoteIP, 1000000, &d_now); // 1 sec
// code below makes sure we don't filter COM or the root
- if (s_serverdownmaxfails > 0 && (auth != DNSName(".")) && t_sstorage->fails.incr(*remoteIP) >= s_serverdownmaxfails) {
+ if (s_serverdownmaxfails > 0 && (auth != g_rootdnsname) && t_sstorage->fails.incr(*remoteIP) >= s_serverdownmaxfails) {
LOG(prefix<<qname<<": Max fails reached resolving on "<< remoteIP->toString() <<". Going full throttle for "<< s_serverdownthrottletime <<" seconds" <<endl);
t_sstorage->throttle.throttle(d_now.tv_sec, boost::make_tuple(*remoteIP, "", 0), s_serverdownthrottletime, 10000); // mark server as down
} else if(resolveret==-1)
vector<unsigned char> packet;
reportBasicTypes();
DNSName root(".");
- DNSPacketWriter dpw1(packet, DNSName("."), QType::AAAA);
+ DNSPacketWriter dpw1(packet, g_rootdnsname, QType::AAAA);
DNSName p((char*)&packet[0], packet.size(), 12, false);
BOOST_CHECK_EQUAL(p, root);
unsigned char* buffer=&packet[0];
BOOST_CHECK(!smn.check(DNSName("www.news.gov.uk.")));
- smn.add(DNSName(".")); // block the root
+ smn.add(g_rootdnsname); // block the root
BOOST_CHECK(smn.check(DNSName("a.root-servers.net.")));
}
BOOST_CHECK(!DNSName("www.BeRt.com").canonCompare(DNSName("WWW.berT.com")));
CanonDNSNameCompare a;
- BOOST_CHECK(a(DNSName("."), DNSName("www.powerdns.com")));
- BOOST_CHECK(a(DNSName("."), DNSName("www.powerdns.net")));
- BOOST_CHECK(!a(DNSName("www.powerdns.net"), DNSName(".")));
+ BOOST_CHECK(a(g_rootdnsname, DNSName("www.powerdns.com")));
+ BOOST_CHECK(a(g_rootdnsname, DNSName("www.powerdns.net")));
+ BOOST_CHECK(!a(DNSName("www.powerdns.net"), g_rootdnsname));
vector<DNSName> vec;
for(const std::string& a : {"bert.com.", "alpha.nl.", "articles.xxx.",
{
for (const auto &dsRecord : rootDSs) {
auto ds=unique_ptr<DSRecordContent>(dynamic_cast<DSRecordContent*>(DSRecordContent::make(dsRecord)));
- dsAnchors[DNSName(".")].insert(*ds);
+ dsAnchors[g_rootdnsname].insert(*ds);
}
}
LOG("DNSKEY did not match the DS, parent DS: "<<drc.getZoneRepresentation() << " ! = "<<dsrc2.getZoneRepresentation()<<endl);
}
// cout<<" subgraph "<<dotEscape("cluster "+qname)<<" { "<<dotEscape("DS "+qname)<<" -> "<<dotEscape("DNSKEY "+qname)<<" [ label = \""<<dsrc.d_tag<<"/"<<static_cast<int>(dsrc.d_digesttype)<<"\" ]; label = \"zone: "<<qname<<"\"; }"<<endl;
- dotEdge(DNSName("."), "DS", qname, "" /*std::to_string(dsrc.d_tag)*/, "DNSKEY", qname, std::to_string(drc.getTag()), isValid ? "green" : "red");
+ dotEdge(g_rootdnsname, "DS", qname, "" /*std::to_string(dsrc.d_tag)*/, "DNSKEY", qname, std::to_string(drc.getTag()), isValid ? "green" : "red");
// dotNode("DNSKEY", qname, (boost::format("tag=%d, algo=%d") % drc.getTag() % static_cast<int>(drc.d_algorithm)).str());
}
}
{
#ifdef GRAPHVIZ
cout<<" ";
- if(zone != DNSName(".")) cout<<"subgraph "<<dotEscape("cluster "+zone.toString())<<" { ";
+ if(zone != g_rootdnsname) cout<<"subgraph "<<dotEscape("cluster "+zone.toString())<<" { ";
cout<<dotEscape(dotName(type1, name1, tag1))
<<" -> "
<<dotEscape(dotName(type2, name2, tag2));
if(color != "") cout<<" [ color=\""<<color<<"\" ]; ";
else cout<<"; ";
- if(zone != DNSName(".")) cout<<"label = "<<dotEscape("zone: "+zone.toString())<<";"<<"}";
+ if(zone != g_rootdnsname) cout<<"label = "<<dotEscape("zone: "+zone.toString())<<";"<<"}";
cout<<endl;
#endif
}
}
try
{
- if( i->name != DNSName(".") && i->name != DNSName("localhost") && i->name != DNSName("0.0.127.in-addr.arpa") )
+ if( i->name != g_rootdnsname && i->name != DNSName("localhost") && i->name != DNSName("0.0.127.in-addr.arpa") )
{
cerr << "Parsing file: " << i->filename << ", domain: " << i->name << endl;
g_zonename = i->name;