}
}
-string dotConcat(const std::string& a, const std::string &b)
-{
- if(a.empty() || b.empty())
- return a+b;
- else
- return a+"."+b;
-}
-bool Bind2Backend::getBeforeAndAfterNames(uint32_t id, const std::string& zonename, const std::string& qname, std::string& before, std::string& after)
+
+bool Bind2Backend::getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& before, std::string& after)
{
shared_ptr<State> state = s_state;
BB2DomainInfo& bbd = state->id_zone_map[id];
string domain=toLower(qname);
-
- if(domain == bbd.d_name)
- domain.clear();
- else
- domain = domain.substr(0, domain.size() - bbd.d_name.length() - 1); // strip domain name
-
string lname = labelReverse(domain);
cout<<"starting lower bound for: '"<<domain<<"', search is for: '"<<lname<<"'"<<endl;
}
if(iter != bbd.d_records->begin()) {
cerr<<"\tFound: '"<<(iter-1)->qname<<"', auth = "<<(iter-1)->auth<<"\n";
- before = dotConcat(labelReverse((iter - 1)->qname), bbd.d_name);
+ before = (iter - 1)->qname;
}
else {
cerr<<"PANIC! Wanted something before the first record!"<<endl;
after = dotConcat(labelReverse(bbd.d_records->begin()->qname), bbd.d_name);
} else {
cerr<<"\tFound: '"<<iter->qname<<"'"<<endl;
- after = dotConcat(labelReverse((iter)->qname), bbd.d_name);
+ after = (iter)->qname;
}
cerr<<"Before: '"<<before<<"', after: '"<<after<<"'\n";
void getUpdatedMasters(vector<DomainInfo> *changedDomains);
bool getDomainInfo(const string &domain, DomainInfo &di);
time_t getCtime(const string &fname);
- virtual bool getBeforeAndAfterNames(uint32_t id, const std::string& zname, const std::string& qname, std::string& before, std::string& after);
+ virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& before, std::string& after);
void lookup(const QType &, const string &qdomain, DNSPacket *p=0, int zoneId=-1);
bool list(const string &target, int id);
bool get(DNSResourceRecord &);
return true;
}
-bool GSQLBackend::getBeforeAndAfterNames(uint32_t id, const std::string& zonename, const std::string& qname, std::string& before, std::string& after)
+
+bool GSQLBackend::getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& before, std::string& after)
{
cerr<<"gsql before/after called for id="<<id<<", qname="<<qname<<endl;
string lcqname=toLower(qname);
- if(lcqname == zonename) // XXX FIXME NEED A CALL THAT DOES THIS RIGHT
- lcqname.clear();
- else
- lcqname = lcqname.substr(0, lcqname.size() - zonename.length() - 1); // strip domain name
-
- lcqname=labelReverse(lcqname);
-
SSql::row_t row;
char output[1024];
d_db->doQuery(output);
while(d_db->getRow(row)) {
- after=labelReverse(row[0])+"."+zonename;
+ after=row[0];
}
snprintf(output, sizeof(output)-1, d_beforeOrderQuery.c_str(), sqlEscape(lcqname).c_str(), id);
d_db->doQuery(output);
while(d_db->getRow(row)) {
- before=labelReverse(row[0])+"."+zonename;
+ before=row[0];
}
- return false;
+ return true;
}
void getUpdatedMasters(vector<DomainInfo> *updatedDomains);
bool getDomainInfo(const string &domain, DomainInfo &di);
void setNotified(uint32_t domain_id, uint32_t serial);
- bool getBeforeAndAfterNames(uint32_t id, const std::string& zname, const std::string& qname, std::string& before, std::string& after);
+ virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& before, std::string& after);
bool updateDNSSECOrderAndAuth(uint32_t domain_id, const std::string& zonename, const std::string& qname, bool auth);
private:
return true;
}
+bool DNSBackend::getBeforeAndAfterNames(uint32_t id, const std::string& zonename, const std::string& qname, std::string& before, std::string& after)
+{
+ string lcqname=toLower(qname);
+ lcqname=makeRelative(qname, zonename);
+
+ lcqname=labelReverse(lcqname);
+ bool ret = this->getBeforeAndAfterNamesAbsolute(id, lcqname, before, after);
+
+ before=dotConcat(labelReverse(before), zonename);
+ after=dotConcat(labelReverse(after), zonename);
+ return ret;
+}
virtual void lookup(const QType &qtype, const string &qdomain, DNSPacket *pkt_p=0, int zoneId=-1)=0;
virtual bool get(DNSResourceRecord &)=0; //!< retrieves one DNSResource record, returns false if no more were available
- virtual bool getBeforeAndAfterNames(uint32_t id, const std::string& zonename, const std::string& qname, std::string& before, std::string& after)
+ virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& before, std::string& after)
{
- std::cerr<<"Default beforeAndAfter called!"<<std::endl;
+ std::cerr<<"Default beforeAndAfterAbsolute called!"<<std::endl;
return false;
}
+ bool getBeforeAndAfterNames(uint32_t id, const std::string& zonename, const std::string& qname, std::string& before, std::string& after);
+
virtual bool updateDNSSECOrderAndAuth(uint32_t domain_id, const std::string& zonename, const std::string& qname, bool auth)
{
return false;
return fqdn.substr(0, fqdn.size() - zone.length() - 1); // strip domain name
return "";
}
+
+string dotConcat(const std::string& a, const std::string &b)
+{
+ if(a.empty() || b.empty())
+ return a+b;
+ else
+ return a+"."+b;
+}
void seedRandom(const string& source);
string makeRelative(const std::string& fqdn, const std::string& zone);
string labelReverse(const std::string& qname);
+std::string dotConcat(const std::string& a, const std::string &b);
#endif