}
}
-bool Bind2Backend::findBeforeAndAfterUnhashed(BB2DomainInfo& bbd, const DNSName& qname, DNSName& unhashed, string& before, string& after)
+bool Bind2Backend::findBeforeAndAfterUnhashed(BB2DomainInfo& bbd, const DNSName& qname, DNSName& unhashed, DNSName& before, DNSName& after)
{
shared_ptr<const recordstorage_t> records = bbd.d_records.get();
--iterBefore;
while((!iterBefore->auth && iterBefore->qtype != QType::NS) || !iterBefore->qtype)
--iterBefore;
- before=iterBefore->qname.labelReverse().toString(" ",false);
+ before=iterBefore->qname;
if(iterAfter == records->end()) {
iterAfter = records->begin();
}
}
}
- after = iterAfter->qname.labelReverse().toString(" ",false);
+ after = iterAfter->qname;
return true;
}
-bool Bind2Backend::getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, DNSName& unhashed, std::string& before, std::string& after)
+bool Bind2Backend::getBeforeAndAfterNamesAbsolute(uint32_t id, const DNSName& qname, DNSName& unhashed, DNSName& before, DNSName& after)
{
BB2DomainInfo bbd;
safeGetBBDomainInfo(id, &bbd);
nsec3zone=getNSEC3PARAM(bbd.d_name, &ns3pr);
if(!nsec3zone) {
- DNSName dqname(DNSName(boost::replace_all_copy(qname," ",".")).labelReverse()); // the horror
- return findBeforeAndAfterUnhashed(bbd, dqname, unhashed, before, after);
- } else {
+ return findBeforeAndAfterUnhashed(bbd, qname, unhashed, before, after);
+ }
+ else {
auto& hashindex=boost::multi_index::get<NSEC3Tag>(*bbd.d_records.getWRITABLE());
// for(auto iter = first; iter != hashindex.end(); iter++)
if (iter == hashindex.end()) {
--iter;
- before = iter->nsec3hash;
- after = first->nsec3hash;
+ before = DNSName(iter->nsec3hash);
+ after = DNSName(first->nsec3hash);
} else {
- after = iter->nsec3hash;
+ after = DNSName(iter->nsec3hash);
if (iter != first)
--iter;
else
iter = --hashindex.end();
- before = iter->nsec3hash;
+ before = DNSName(iter->nsec3hash);
}
unhashed = iter->qname+bbd.d_name;
bool getDomainInfo(const DNSName &domain, DomainInfo &di);
time_t getCtime(const string &fname);
// DNSSEC
- virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const string& qname, DNSName& unhashed, string& before, string& after);
+ virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const DNSName& qname, DNSName& unhashed, DNSName& before, DNSName& after);
void lookup(const QType &, const DNSName &qdomain, DNSPacket *p=0, int zoneId=-1);
bool list(const DNSName &target, int id, bool include_disabled=false);
bool get(DNSResourceRecord &);
BB2DomainInfo createDomainEntry(const DNSName& domain, const string &filename); //!< does not insert in s_state
void queueReloadAndStore(unsigned int id);
- bool findBeforeAndAfterUnhashed(BB2DomainInfo& bbd, const DNSName& qname, DNSName& unhashed, string& before, string& after);
+ bool findBeforeAndAfterUnhashed(BB2DomainInfo& bbd, const DNSName& qname, DNSName& unhashed, DNSName& before, DNSName& after);
void reload();
static string DLDomStatusHandler(const vector<string>&parts, Utility::pid_t ppid);
static string DLListRejectsHandler(const vector<string>&parts, Utility::pid_t ppid);
return d_dnssecQueries;
}
-bool GSQLBackend::getBeforeAndAfterNamesAbsolute(uint32_t id, const string& qname, DNSName& unhashed, std::string& before, std::string& after)
+bool GSQLBackend::getBeforeAndAfterNamesAbsolute(uint32_t id, const DNSName& qname, DNSName& unhashed, DNSName& before, DNSName& after)
{
if(!d_dnssecQueries)
return false;
SSqlStatement::row_t row;
try {
d_afterOrderQuery_stmt->
- bind("ordername", qname)->
+ bind("ordername", qname.labelReverse().toString(" ", false))->
bind("domain_id", id)->
execute();
while(d_afterOrderQuery_stmt->hasNextRow()) {
d_afterOrderQuery_stmt->nextRow(row);
ASSERT_ROW_COLUMNS("get-order-after-query", row, 1);
- after=row[0];
+ after=DNSName(boost::replace_all_copy(row[0]," ",".")).labelReverse();
}
d_afterOrderQuery_stmt->reset();
}
throw PDNSException("GSQLBackend unable to find before/after (after) for domain_id "+itoa(id)+": "+e.txtReason());
}
- if(after.empty() && !qname.empty()) {
+ if(after.empty()) {
try {
d_firstOrderQuery_stmt->
bind("domain_id", id)->
while(d_firstOrderQuery_stmt->hasNextRow()) {
d_firstOrderQuery_stmt->nextRow(row);
ASSERT_ROW_COLUMNS("get-order-first-query", row, 1);
- after=row[0];
+ after=DNSName(boost::replace_all_copy(row[0]," ",".")).labelReverse();
}
d_firstOrderQuery_stmt->reset();
}
try {
d_beforeOrderQuery_stmt->
- bind("ordername", qname)->
+ bind("ordername", qname.labelReverse().toString(" ", false))->
bind("domain_id", id)->
execute();
while(d_beforeOrderQuery_stmt->hasNextRow()) {
d_beforeOrderQuery_stmt->nextRow(row);
ASSERT_ROW_COLUMNS("get-order-before-query", row, 2);
- before=row[0];
+ before=DNSName(boost::replace_all_copy(row[0]," ",".")).labelReverse();
try {
unhashed=DNSName(row[1]);
} catch (...) {
while(d_lastOrderQuery_stmt->hasNextRow()) {
d_lastOrderQuery_stmt->nextRow(row);
ASSERT_ROW_COLUMNS("get-order-last-query", row, 2);
- before=row[0];
+ before=DNSName(boost::replace_all_copy(row[0]," ",".")).labelReverse();
try {
unhashed=DNSName(row[1]);
} catch (...) {
bool setKind(const DNSName &domain, const DomainInfo::DomainKind kind);
bool setAccount(const DNSName &domain, const string &account);
- virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const string& qname, DNSName& unhashed, std::string& before, std::string& after);
+ virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const DNSName& qname, DNSName& unhashed, DNSName& before, DNSName& after);
virtual bool updateDNSSECOrderNameAndAuth(uint32_t domain_id, const DNSName& zonename, const DNSName& qname, const DNSName& ordername, bool auth, const uint16_t=QType::ANY);
virtual bool updateEmptyNonTerminals(uint32_t domain_id, const DNSName& zonename, set<DNSName>& insert ,set<DNSName>& erase, bool remove);
bool DNSBackend::getBeforeAndAfterNames(uint32_t id, const DNSName& zonename, const DNSName& qname, DNSName& before, DNSName& after)
{
- // FIXME400 FIXME400 FIXME400
- // string lcqname=toLower(qname); FIXME400 tolower?
- // string lczonename=toLower(zonename); FIXME400 tolower?
- // lcqname=makeRelative(lcqname, lczonename);
- DNSName lczonename = zonename.makeLowerCase();
- // lcqname=labelReverse(lcqname);
- DNSName dnc;
- string relqname, sbefore, safter;
- relqname=qname.makeRelative(zonename).labelReverse().toString(" ", false);
- //sbefore = before.toString();
- //safter = after.toString();
- bool ret = this->getBeforeAndAfterNamesAbsolute(id, relqname, dnc, sbefore, safter);
- boost::replace_all(sbefore, " ", ".");
- boost::replace_all(safter, " ", ".");
- before = DNSName(sbefore).labelReverse() + lczonename;
- after = DNSName(safter).labelReverse() + lczonename;
-
- // before=dotConcat(labelReverse(before), lczonename); FIXME400
- // after=dotConcat(labelReverse(after), lczonename); FIXME400
+ DNSName unhashed;
+ bool ret = this->getBeforeAndAfterNamesAbsolute(id, qname.makeRelative(zonename).makeLowerCase(), unhashed, before, after);
+ DNSName lczonename = zonename.makeLowerCase();
+ before += lczonename;
+ after += lczonename;
return ret;
}
virtual bool deleteTSIGKey(const DNSName& name) { return false; }
virtual bool getTSIGKeys(std::vector< struct TSIGKey > &keys) { return false; }
- virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const string& qname, DNSName& unhashed, string& before, string& after)
+ virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const DNSName& qname, DNSName& unhashed, DNSName& before, DNSName& after)
{
std::cerr<<"Default beforeAndAfterAbsolute called!"<<std::endl;
abort();
}
-bool getNSEC3Hashes(bool narrow, DNSBackend* db, int id, const std::string& hashed, bool decrement, DNSName& unhashed, string& before, string& after, int mode)
+bool getNSEC3Hashes(bool narrow, DNSBackend* db, int id, const std::string& hashed, bool decrement, DNSName& unhashed, std::string& before, std::string& after, int mode)
{
bool ret;
if(narrow) { // nsec3-narrow
incrementHash(after);
}
else {
- if (decrement || mode <= 1)
- before.clear();
- else
- before=' ';
- ret=db->getBeforeAndAfterNamesAbsolute(id, toBase32Hex(hashed), unhashed, before, after);
- before=fromBase32Hex(before);
- after=fromBase32Hex(after);
- }
- // cerr<<"rgetNSEC3Hashes: "<<hashed<<", "<<unhashed<<", "<<before<<", "<<after<<endl;
+ DNSName hashedName = DNSName(toBase32Hex(hashed));
+ DNSName beforeName, afterName;
+ if (!decrement && mode >= 2)
+ beforeName = hashedName;
+ ret=db->getBeforeAndAfterNamesAbsolute(id, hashedName, unhashed, beforeName, afterName);
+ before=fromBase32Hex(beforeName.toString());
+ after=fromBase32Hex(afterName.toString());
+ }
return ret;
}