From: Peter van Dijk Date: Mon, 1 Jun 2015 10:50:56 +0000 (+0200) Subject: pdns_server compiles and links, sdig does not X-Git-Tag: dnsdist-1.0.0-alpha1~248^2~58^2~21^2~5^2~73 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7abbc40fbd8dfd68bbc892806264dd4bdb82e8a6;p=thirdparty%2Fpdns.git pdns_server compiles and links, sdig does not --- diff --git a/pdns/dnsbackend.cc b/pdns/dnsbackend.cc index 3f4b1b06bd..20998836dd 100644 --- a/pdns/dnsbackend.cc +++ b/pdns/dnsbackend.cc @@ -258,7 +258,7 @@ bool DNSBackend::getSOA(const DNSName &domain, SOAData &sd, DNSPacket *p) // attodot(sd.hostmaster); FIXME } else - sd.hostmaster="hostmaster."+domain; + sd.hostmaster=DNSName("hostmaster")+domain; } if(!sd.serial) { // magic time! diff --git a/pdns/dnsname.cc b/pdns/dnsname.cc index 85f5c277f2..3a39b6c6e7 100644 --- a/pdns/dnsname.cc +++ b/pdns/dnsname.cc @@ -3,6 +3,7 @@ #include #include "dnswriter.hh" +#include "logger.hh" /* raw storage in DNS label format, without trailing 0. So the root is of length 0. @@ -205,3 +206,9 @@ string DNSName::escapeLabel(const std::string& label) } +Logger& Logger::operator<<(const DNSName &d) +{ + *this< #include // #include "dns.hh" -#include "logger.hh" +// #include "logger.hh" // #include diff --git a/pdns/dnspacket.hh b/pdns/dnspacket.hh index 01be831768..5ab7ce4e6a 100644 --- a/pdns/dnspacket.hh +++ b/pdns/dnspacket.hh @@ -182,6 +182,6 @@ private: }; -bool checkForCorrectTSIG(const DNSPacket* q, UeberBackend* B, string* keyname, string* secret, TSIGRecordContent* trc); +bool checkForCorrectTSIG(const DNSPacket* q, UeberBackend* B, DNSName* keyname, string* secret, TSIGRecordContent* trc); #endif diff --git a/pdns/logger.cc b/pdns/logger.cc index 2202372422..e92d4446dd 100644 --- a/pdns/logger.cc +++ b/pdns/logger.cc @@ -142,6 +142,12 @@ Logger& Logger::operator<<(const string &s) return *this; } +Logger& Logger::operator<<(const char *s) +{ + *this< @@ -31,6 +30,7 @@ #include #include "namespaces.hh" +#include "dnsname.hh" //! The Logger class can be used to log messages in various ways. class Logger @@ -67,6 +67,7 @@ public: L<<"This is an informational message"<&parts) { return "no policy script loaded"; } -bool AuthLua::axfrfilter(const ComboAddress& remote, const string& zone, const DNSResourceRecord& in, vector& out) +bool AuthLua::axfrfilter(const ComboAddress& remote, const DNSName& zone, const DNSResourceRecord& in, vector& out) { return false; } @@ -57,7 +57,7 @@ AuthLua::AuthLua(const std::string &fname) pthread_mutex_init(&d_lock,0); } -bool AuthLua::axfrfilter(const ComboAddress& remote, const string& zone, const DNSResourceRecord& in, vector& out) +bool AuthLua::axfrfilter(const ComboAddress& remote, const DNSName& zone, const DNSResourceRecord& in, vector& out) { lua_getglobal(d_lua, "axfrfilter"); if(!lua_isfunction(d_lua, -1)) { @@ -67,7 +67,7 @@ bool AuthLua::axfrfilter(const ComboAddress& remote, const string& zone, const D } lua_pushstring(d_lua, remote.toString().c_str() ); - lua_pushstring(d_lua, zone.c_str() ); + lua_pushstring(d_lua, zone.toString().c_str() ); // FIXME expose DNSName to Lua? lua_pushstring(d_lua, in.qname.c_str() ); lua_pushnumber(d_lua, in.qtype.getCode() ); lua_pushnumber(d_lua, in.ttl ); diff --git a/pdns/lua-auth.hh b/pdns/lua-auth.hh index 633dfb831e..d30a73b85e 100644 --- a/pdns/lua-auth.hh +++ b/pdns/lua-auth.hh @@ -11,7 +11,7 @@ class AuthLua : public PowerDNSLua public: explicit AuthLua(const std::string& fname); // ~AuthLua(); - bool axfrfilter(const ComboAddress& remote, const string& zone, const DNSResourceRecord& in, vector& out); + bool axfrfilter(const ComboAddress& remote, const DNSName& zone, const DNSResourceRecord& in, vector& out); DNSPacket* prequery(DNSPacket *p); int police(DNSPacket *req, DNSPacket *resp, bool isTcp=false); string policycmd(const vector&parts); diff --git a/pdns/packethandler.cc b/pdns/packethandler.cc index f56f256182..549f4f026e 100644 --- a/pdns/packethandler.cc +++ b/pdns/packethandler.cc @@ -1045,7 +1045,8 @@ DNSPacket *PacketHandler::questionOrRecurse(DNSPacket *p, bool *shouldRecurse) } if(p->d_havetsig) { - string keyname, secret; + DNSName keyname; + string secret; TSIGRecordContent trc; if(!checkForCorrectTSIG(p, &B, &keyname, &secret, &trc)) { r=p->replyPacket(); // generate an empty reply packet diff --git a/pdns/resolver.hh b/pdns/resolver.hh index a70434e141..d54faa8238 100644 --- a/pdns/resolver.hh +++ b/pdns/resolver.hh @@ -116,7 +116,7 @@ class AXFRRetriever : public boost::noncopyable class FindNS { public: - vector lookup(const string &name, DNSBackend *b) + vector lookup(const DNSName &name, DNSBackend *b) { vector addresses; @@ -131,7 +131,7 @@ public: return addresses; } - vector lookup(const string &name, UeberBackend *b) + vector lookup(const DNSName &name, UeberBackend *b) { vector addresses; @@ -147,7 +147,7 @@ public: } private: - void resolve_name(vector* addresses, const string& name) + void resolve_name(vector* addresses, const DNSName& name) { struct addrinfo* res; struct addrinfo hints; @@ -157,7 +157,7 @@ private: hints.ai_family = n ? AF_INET : AF_INET6; ComboAddress remote; remote.sin4.sin_family = AF_INET6; - if(!getaddrinfo(name.c_str(), 0, &hints, &res)) { + if(!getaddrinfo(name.toString().c_str(), 0, &hints, &res)) { struct addrinfo* address = res; do { memcpy(&remote, address->ai_addr, address->ai_addrlen); diff --git a/pdns/rfc2136handler.cc b/pdns/rfc2136handler.cc index 25a2aceabc..62d59f274e 100644 --- a/pdns/rfc2136handler.cc +++ b/pdns/rfc2136handler.cc @@ -693,7 +693,8 @@ int PacketHandler::processUpdate(DNSPacket *p) { bool validKey = false; TSIGRecordContent trc; - string inputkey, message; + DNSName inputkey; + string message; if (! p->getTSIGDetails(&trc, &inputkey, 0)) { L<qdomain, di) || !di.backend) { - L<qdomain<<"' (or backend does not support DNS update operation)"<qdomain.toString()<<"' (or backend does not support DNS update operation)"<d_place == DNSRecord::Answer || rr->d_place == DNSRecord::Nameserver)) continue; - string label = stripDot(rr->d_label); - - if (!label.isPartOf(di.zone)) { + if (!rr->d_label.isPartOf(di.zone)) { L<startTransaction(p->qdomain, -1)) { // Not giving the domain_id means that we do not delete the existing records. - L<qdomain<<" does not support transaction. Can't do Update packet."<qdomain.toString()<<" does not support transaction. Can't do Update packet."<first; if (rr->d_place == DNSRecord::Nameserver) { - if (rr->d_class == QClass::NONE && rr->d_type == QType::NS && stripDot(rr->d_label) == di.zone) + if (rr->d_class == QClass::NONE && rr->d_type == QType::NS && rr->d_label == di.zone) nsRRtoDelete.push_back(rr); else changedRecords += performUpdate(msgPrefix, rr, &di, isPresigned, &narrow, &haveNSEC3, &ns3pr, &updatedSerial); @@ -907,7 +906,7 @@ int PacketHandler::processUpdate(DNSPacket *p) { S.deposit("dnsupdate-changes", changedRecords); // Purge the records! - DNSName zone(di.zone); + string zone(di.zone.toString()); zone.append("$"); PC.purge(zone); diff --git a/pdns/serialtweaker.cc b/pdns/serialtweaker.cc index ad410861b1..4e30e8d328 100644 --- a/pdns/serialtweaker.cc +++ b/pdns/serialtweaker.cc @@ -39,7 +39,7 @@ uint32_t localtime_format_YYYYMMDDSS(time_t t, uint32_t seq) + seq; } -bool editSOA(DNSSECKeeper& dk, const string& qname, DNSPacket* dp) +bool editSOA(DNSSECKeeper& dk, const DNSName& qname, DNSPacket* dp) { vector& rrs = dp->getRRS(); BOOST_FOREACH(DNSResourceRecord& rr, rrs) { diff --git a/pdns/slavecommunicator.cc b/pdns/slavecommunicator.cc index 188e3067ae..c398de4eba 100644 --- a/pdns/slavecommunicator.cc +++ b/pdns/slavecommunicator.cc @@ -50,7 +50,7 @@ using boost::scoped_ptr; -void CommunicatorClass::addSuckRequest(const string &domain, const string &master) +void CommunicatorClass::addSuckRequest(const DNSName &domain, const string &master) { Lock l(&d_lock); SuckRequest sr; @@ -65,9 +65,9 @@ void CommunicatorClass::addSuckRequest(const string &domain, const string &maste } } -void CommunicatorClass::suck(const string &domain,const string &remote) +void CommunicatorClass::suck(const DNSName &domain,const string &remote) { - L< nsset, qnames, secured; + set nsset, qnames, secured; vector rrs; ComboAddress raddr(remote, 53); - AXFRRetriever retriever(raddr, domain.c_str(), tsigkeyname, tsigalgorithm, tsigsecret, (laddr.sin4.sin_family == 0) ? NULL : &laddr); + AXFRRetriever retriever(raddr, domain, tsigkeyname, tsigalgorithm, tsigsecret, (laddr.sin4.sin_family == 0) ? NULL : &laddr); Resolver::res_t recs; while(retriever.getChunk(recs)) { if(first) { - L<qtype.getCode() == QType::OPT || i->qtype.getCode() == QType::TSIG) // ignore EDNS0 & TSIG continue; - if(!endsOn(i->qname, domain)) { - L<qname.toString()<<"'|"<qtype.getName()<<" during AXFR of zone '"<qname.isPartOf(domain)) { + L<qname.toString()<<"'|"<qtype.getName()<<" during AXFR of zone '"<startTransaction(domain, domain_id); - L< rrterm; - map nonterm; + string ordername; + DNSName shorter; + set rrterm; + map nonterm; BOOST_FOREACH(DNSResourceRecord& rr, rrs) { @@ -318,7 +320,7 @@ void CommunicatorClass::suck(const string &domain,const string &remote) if (pdns_iequals(shorter, domain)) // stop at apex break; - }while(chopOff(shorter)); + }while(shorter.chopOff()); // Insert ents if(doent && !rrterm.empty()) { @@ -330,15 +332,15 @@ void CommunicatorClass::suck(const string &domain,const string &remote) } else auth=rr.auth; - BOOST_FOREACH(const string nt, rrterm){ + for(const auto &nt: rrterm){ if (!nonterm.count(nt)) - nonterm.insert(pair(nt, auth)); + nonterm.insert(pair(nt, auth)); else if (auth) nonterm[nt]=true; } if(nonterm.size() > maxent) { - L<feedRecord(rr, &ordername); } else di.backend->feedRecord(rr); @@ -380,7 +382,7 @@ void CommunicatorClass::suck(const string &domain,const string &remote) di.backend->commitTransaction(); transaction = false; di.backend->setFresh(domain_id); - PC.purge(domain+"$"); + PC.purge(domain.toString()+"$"); L<getDomainInfo(di.zone, di)) { - L<setFresh(di.id); } else { diff --git a/pdns/tcpreceiver.cc b/pdns/tcpreceiver.cc index 4291c17bf3..e74e19b684 100644 --- a/pdns/tcpreceiver.cc +++ b/pdns/tcpreceiver.cc @@ -184,9 +184,9 @@ void TCPNameserver::sendPacket(shared_ptr p, int outsock) if(p->qtype.getCode()!=QType::AXFR && p->qtype.getCode()!=QType::IXFR) { if(p->d.aa) { if(p->d.rcode==RCode::NXDomain) - S.ringAccount("nxdomain-queries",p->qdomain+"/"+p->qtype.getName()); + S.ringAccount("nxdomain-queries",p->qdomain.toString()+"/"+p->qtype.getName()); } else if(p->isEmpty()) { - S.ringAccount("unauth-queries",p->qdomain+"/"+p->qtype.getName()); + S.ringAccount("unauth-queries",p->qdomain.toString()+"/"+p->qtype.getName()); S.ringAccount("remotes-unauth",p->d_remote); } } @@ -417,7 +417,8 @@ bool TCPNameserver::canDoAXFR(shared_ptr q) if(q->d_havetsig) { // if you have one, it must be good TSIGRecordContent trc; - string keyname, secret; + DNSName keyname; + string secret; if(!checkForCorrectTSIG(q.get(), s_P->getBackend(), &keyname, &secret, &trc)) { return false; } else { @@ -476,13 +477,13 @@ bool TCPNameserver::canDoAXFR(shared_ptr q) // cerr<<"AUTO-NS magic please!"< nsset; + set nsset; B->lookup(QType(QType::NS),q->qdomain); while(B->get(rr)) nsset.insert(rr.content); - for(set::const_iterator j=nsset.begin();j!=nsset.end();++j) { - vector nsips=fns.lookup(*j, B); + for(const auto & j: nsset) { + vector nsips=fns.lookup(j, B); for(vector::const_iterator k=nsips.begin();k!=nsips.end();++k) { // cerr<<"got "<<*k<<" from AUTO-NS"<getRemote()) @@ -551,13 +552,13 @@ namespace { /** do the actual zone transfer. Return 0 in case of error, 1 in case of success */ -int TCPNameserver::doAXFR(const string &target, shared_ptr q, int outsock) +int TCPNameserver::doAXFR(const DNSName &target, shared_ptr q, int outsock) { shared_ptr outpacket= getFreshAXFRPacket(q); if(q->d_dnssecOk) outpacket->d_dnssecOk=true; // RFC 5936, 2.2.5 'SHOULD' - L<getRemote()<getRemote()< q, int out } if (!canDoAXFR(q)) { - L<getRemote()<<" cannot request AXFR"<getRemote()<<" cannot request AXFR"<setRcode(9); // 'NOTAUTH' sendPacket(outpacket,outsock); return 0; @@ -578,7 +579,7 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr q, int out // canDoAXFR does all the ACL checks, and has the if(disable-axfr) shortcut, call it first. if(!s_P->getBackend()->getSOAUncached(target, sd)) { - L<setRcode(9); // 'NOTAUTH' sendPacket(outpacket,outsock); return 0; @@ -587,7 +588,7 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr q, int out UeberBackend db; if(!db.getSOAUncached(target, sd)) { - L<setRcode(RCode::NotAuth); sendPacket(outpacket,outsock); return 0; @@ -605,13 +606,13 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr q, int out if(dk.getNSEC3PARAM(target, &ns3pr, &narrow)) { NSEC3Zone=true; if(narrow) { - L<getRemote()<getRemote()<getRemote()<getRemote()<setRcode(RCode::Refused); // FIXME: should actually figure out if we are auth over a zone, and send out 9 if we aren't sendPacket(outpacket,outsock); @@ -619,13 +620,14 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr q, int out } TSIGRecordContent trc; - string tsigkeyname, tsigsecret; + DNSName tsigkeyname; + string tsigsecret; q->getTSIGDetails(&trc, &tsigkeyname, 0); if(!tsigkeyname.empty()) { string tsig64; - string algorithm=trc.d_algoName.toString(); // FIXME: check + DNSName algorithm=trc.d_algoName; // FIXME: check if (algorithm == "hmac-md5.sig-alg.reg.int") algorithm = "hmac-md5"; if (algorithm != "gss-tsig") { @@ -644,7 +646,7 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr q, int out outpacket->addRecord(soa); editSOA(dk, sd.qname, outpacket.get()); if(securedZone) { - set authSet; + set authSet; authSet.insert(target); addRRSigs(dk, signatureDB, authSet, outpacket->getRRS()); } @@ -675,7 +677,7 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr q, int out BOOST_FOREACH(const DNSSECKeeper::keyset_t::value_type& value, keys) { rr.qtype = QType(QType::DNSKEY); rr.content = value.first.getDNSKEY().getZoneRepresentation(); - string keyname = NSEC3Zone ? hashQNameWithSalt(ns3pr.d_iterations, ns3pr.d_salt, rr.qname) : labelReverse(rr.qname); + string keyname = NSEC3Zone ? hashQNameWithSalt(ns3pr.d_iterations, ns3pr.d_salt, rr.qname) : labelReverse(rr.qname.toString()); NSECXEntry& ne = nsecxrepo[keyname]; ne.d_set.insert(rr.qtype.getCode()); @@ -716,11 +718,11 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr q, int out const bool rectify = !(presignedZone || ::arg().mustDo("disable-axfr-rectify")); - set qnames, nsset, terms; + set qnames, nsset, terms; vector rrs; while(sd.db->get(rr)) { - if(endsOn(rr.qname, target)) { + if(rr.qname.isPartOf(target)) { if (rectify) { if (rr.qtype.getCode()) { qnames.insert(rr.qname); @@ -743,13 +745,13 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr q, int out BOOST_FOREACH(DNSResourceRecord &rr, rrs) { rr.auth=true; if (rr.qtype.getCode() != QType::NS || !pdns_iequals(rr.qname, target)) { - string shorter(rr.qname); + DNSName shorter(rr.qname); do { if (pdns_iequals(shorter, target)) // apex is always auth continue; if(nsset.count(shorter) && !(pdns_iequals(rr.qname, shorter) && rr.qtype.getCode() == QType::DS)) rr.auth=false; - } while(chopOff(shorter)); + } while(shorter.chopOff()); } else continue; } @@ -757,17 +759,17 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr q, int out if(NSEC3Zone) { // ents are only required for NSEC3 zones uint32_t maxent = ::arg().asNum("max-ent-entries"); - map nonterm; + map nonterm; BOOST_FOREACH(DNSResourceRecord &rr, rrs) { - string shorter(rr.qname); - while(!pdns_iequals(shorter, target) && chopOff(shorter)) { + DNSName shorter(rr.qname); + while(!pdns_iequals(shorter, target) && shorter.chopOff()) { if(!qnames.count(shorter)) { if(!(maxent)) { L<(shorter, rr.auth)); + nonterm.insert(pair(shorter, rr.auth)); --maxent; } else if (rr.auth) nonterm[shorter]=true; @@ -775,7 +777,7 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr q, int out } } - pair nt; + pair nt; BOOST_FOREACH(nt, nonterm) { DNSResourceRecord rr; rr.qname=nt.first; @@ -799,7 +801,7 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr q, int out if (rr.qtype.getCode() == QType::RRSIG) { RRSIGRecordContent rrc(rr.content); if(presignedZone && rrc.d_type == QType::NSEC3) - ns3rrs.insert(fromBase32Hex(makeRelative(rr.qname, target))); + ns3rrs.insert(fromBase32Hex(makeRelative(rr.qname.toString(), target.toString()))); continue; } @@ -811,7 +813,7 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr q, int out records++; if(securedZone && (rr.auth || rr.qtype.getCode() == QType::NS)) { if (NSEC3Zone || rr.qtype.getCode()) { - keyname = NSEC3Zone ? hashQNameWithSalt(ns3pr.d_iterations, ns3pr.d_salt, rr.qname) : labelReverse(rr.qname); + keyname = NSEC3Zone ? hashQNameWithSalt(ns3pr.d_iterations, ns3pr.d_salt, rr.qname) : labelReverse(rr.qname.toString()); NSECXEntry& ne = nsecxrepo[keyname]; ne.d_ttl = sd.default_ttl; ne.d_auth = (ne.d_auth || rr.auth || (NSEC3Zone && (!ns3pr.d_flags || (presignedZone && ns3pr.d_flags)))); @@ -871,7 +873,7 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr q, int out inext = nsecxrepo.begin(); } n3rc.d_nexthash = inext->first; - rr.qname = dotConcat(toBase32Hex(iter->first), sd.qname); + rr.qname = DNSName(toBase32Hex(iter->first))+DNSName(sd.qname); rr.ttl = sd.default_ttl; rr.content = n3rc.getZoneRepresentation(); @@ -1034,11 +1036,11 @@ int TCPNameserver::doIXFR(shared_ptr q, int outsock) } } - string target = q->qdomain; + DNSName target = q->qdomain; UeberBackend db; if(!db.getSOAUncached(target, sd)) { - L<setRcode(RCode::NotAuth); sendPacket(outpacket,outsock); return 0; @@ -1048,13 +1050,14 @@ int TCPNameserver::doIXFR(shared_ptr q, int outsock) dk.getFromMeta(target, "SOA-EDIT", soaedit); if (!rfc1982LessThan(serial, calculateEditSOA(sd, soaedit))) { TSIGRecordContent trc; - string tsigkeyname, tsigsecret; + DNSName tsigkeyname; + string tsigsecret; q->getTSIGDetails(&trc, &tsigkeyname, 0); if(!tsigkeyname.empty()) { string tsig64; - string algorithm=trc.d_algoName.toString(); // FIXME: was toLowerCanonic, compare output + DNSName algorithm=trc.d_algoName; // FIXME: was toLowerCanonic, compare output if (algorithm == "hmac-md5.sig-alg.reg.int") algorithm = "hmac-md5"; Lock l(&s_plock); @@ -1070,7 +1073,7 @@ int TCPNameserver::doIXFR(shared_ptr q, int outsock) outpacket->addRecord(soa); editSOA(dk, sd.qname, outpacket.get()); if(securedZone) { - set authSet; + set authSet; authSet.insert(target); addRRSigs(dk, signatureDB, authSet, outpacket->getRRS()); } @@ -1080,12 +1083,12 @@ int TCPNameserver::doIXFR(shared_ptr q, int outsock) sendPacket(outpacket, outsock); - L<getRemote()<<" finished"<getRemote()<<" finished"<qdomain, q, outsock); } diff --git a/pdns/tcpreceiver.hh b/pdns/tcpreceiver.hh index b40e50fb97..a8d0303ed6 100644 --- a/pdns/tcpreceiver.hh +++ b/pdns/tcpreceiver.hh @@ -52,7 +52,7 @@ private: static void sendPacket(std::shared_ptr p, int outsock); static int readLength(int fd, ComboAddress *remote); static void getQuestion(int fd, char *mesg, int pktlen, const ComboAddress& remote); - static int doAXFR(const string &target, std::shared_ptr q, int outsock); + static int doAXFR(const DNSName &target, std::shared_ptr q, int outsock); static int doIXFR(std::shared_ptr q, int outsock); static bool canDoAXFR(std::shared_ptr q); static void *doConnection(void *data); diff --git a/pdns/ws-auth.cc b/pdns/ws-auth.cc index 3c8a2092b6..0de69d4fa9 100644 --- a/pdns/ws-auth.cc +++ b/pdns/ws-auth.cc @@ -290,13 +290,13 @@ static void fillZoneInfo(const DomainInfo& di, Value& jdi, Document& doc) { DNSSECKeeper dk; jdi.SetObject(); // id is the canonical lookup key, which doesn't actually match the name (in some cases) - string zoneId = apiZoneNameToId(di.zone); + string zoneId = apiZoneNameToId(di.zone.toString()); Value jzoneId(zoneId.c_str(), doc.GetAllocator()); // copy jdi.AddMember("id", jzoneId, doc.GetAllocator()); string url = "/servers/localhost/zones/" + zoneId; Value jurl(url.c_str(), doc.GetAllocator()); // copy jdi.AddMember("url", jurl, doc.GetAllocator()); - jdi.AddMember("name", di.zone.c_str(), doc.GetAllocator()); + jdi.AddMember("name", di.zone.toString().c_str(), doc.GetAllocator()); jdi.AddMember("kind", di.getKindString(), doc.GetAllocator()); jdi.AddMember("dnssec", dk.isSecuredZone(di.zone), doc.GetAllocator()); jdi.AddMember("account", di.account.c_str(), doc.GetAllocator()); @@ -339,7 +339,7 @@ static void fillZone(const string& zonename, HttpResponse* resp) { Value object; object.SetObject(); - Value jname(rr.qname.c_str(), doc.GetAllocator()); // copy + Value jname(rr.qname.toString().c_str(), doc.GetAllocator()); // copy object.AddMember("name", jname, doc.GetAllocator()); Value jtype(rr.qtype.getName().c_str(), doc.GetAllocator()); // copy object.AddMember("type", jtype, doc.GetAllocator()); @@ -584,7 +584,7 @@ static void gatherRecordsFromZone(const Value &container, vectorcommitTransaction(); - PC.purge(rr.qname); + PC.purge(rr.qname.toString()); } // success