}
}
-bool TinyDNSBackend::list(const string &target, int domain_id, bool include_disabled) {
+bool TinyDNSBackend::list(const DNSName &target, int domain_id, bool include_disabled) {
d_isAxfr=true;
- string key = simpleCompress(target);
+ string key = simpleCompress(target.toString()); // FIXME bug: no lowercase here? or do we promise lowercase from core now?
d_cdbReader=new CDB(getArg("dbfile"));
return d_cdbReader->searchSuffix(key);
}
-void TinyDNSBackend::lookup(const QType &qtype, const string &qdomain, DNSPacket *pkt_p, int zoneId) {
+void TinyDNSBackend::lookup(const QType &qtype, const DNSName &qdomain, DNSPacket *pkt_p, int zoneId) {
d_isAxfr = false;
- string queryDomain = toLowerCanonic(qdomain);
+ string queryDomain = toLowerCanonic(qdomain.toString());
string key=simpleCompress(queryDomain);
- DLOG(L<<Logger::Debug<<backendname<<"[lookup] query for qtype ["<<qtype.getName()<<"] qdomain ["<<qdomain<<"]"<<endl);
+ DLOG(L<<Logger::Debug<<backendname<<"[lookup] query for qtype ["<<qtype.getName()<<"] qdomain ["<<qdomain.toString()<<"]"<<endl);
DLOG(L<<Logger::Debug<<"[lookup] key ["<<makeHexDump(key)<<"]"<<endl);
d_isWildcardQuery = false;
key.insert(0, 1, '\001');
}
rr.qname.clear();
- simpleExpandTo(key, 0, rr.qname);
- rr.qname = stripDot(rr.qname); // strip the last dot, packethandler needs this.
+ rr.qname=key;
rr.domain_id=-1;
// 11:13.21 <@ahu> IT IS ALWAYS AUTH --- well not really because we are just a backend :-)
// We could actually do NSEC3-NARROW DNSSEC according to Habbie, if we do, we need to change something ehre.
struct TinyDomainInfo {
uint32_t id;
uint32_t notified_serial;
- string zone;
+ DNSName zone;
bool operator<(const TinyDomainInfo& tdi) const
{
public:
// Methods for simple operation
TinyDNSBackend(const string &suffix);
- void lookup(const QType &qtype, const string &qdomain, DNSPacket *pkt_p=0, int zoneId=-1);
- bool list(const string &target, int domain_id, bool include_disabled=false);
+ void lookup(const QType &qtype, const DNSName &qdomain, DNSPacket *pkt_p=0, int zoneId=-1);
+ bool list(const DNSName &target, int domain_id, bool include_disabled=false);
bool get(DNSResourceRecord &rr);
void getAllDomains(vector<DomainInfo> *domains, bool include_disabled=false);
typedef multi_index_container<
TinyDomainInfo,
indexed_by<
- hashed_unique<tag<tag_zone>, member<TinyDomainInfo, string, &TinyDomainInfo::zone> >,
+ hashed_unique<tag<tag_zone>, member<TinyDomainInfo, DNSName, &TinyDomainInfo::zone> >,
hashed_unique<tag<tag_domainid>, member<TinyDomainInfo, uint32_t, &TinyDomainInfo::id> >
>
> TDI_t;
#include "dnswriter.hh"
#include "logger.hh"
+#include "misc.hh"
+
+#include <boost/functional/hash.hpp>
/* raw storage
in DNS label format, without trailing 0. So the root is of length 0.
return true;
}
+size_t hash_value(DNSName const& d)
+{
+ boost::hash<string> hasher;
+ return hasher(toLower(d.toString())); // FIXME HACK
+}
+
string DNSName::escapeLabel(const std::string& label)
{
string ret;
return a.canonCompare(b);
}
};
+size_t hash_value(DNSName const& d);
inline DNSName operator+(const DNSName& lhs, const DNSName& rhs)
{
xfrBlob(blob);
}
+//FIXME remove this method completely
string simpleCompress(const string& elabel, const string& root)
{
string label=elabel;
}
+// FIXME this function needs to go
void simpleExpandTo(const string& label, unsigned int frompos, string& ret)
{
unsigned int labellen=0;