}
}
-void Bind2Backend::getAllDomains(vector<DomainInfo>* domains, bool include_disabled)
+void Bind2Backend::getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled)
{
SOAData soadata;
};
}
- for (DomainInfo& di : *domains) {
- // do not corrupt di if domain supplied by another backend.
- if (di.backend != this)
- continue;
- try {
- this->getSOA(di.zone, soadata);
- }
- catch (...) {
- continue;
+ if (getSerial) {
+ for (DomainInfo& di : *domains) {
+ // do not corrupt di if domain supplied by another backend.
+ if (di.backend != this)
+ continue;
+ try {
+ this->getSOA(di.zone, soadata);
+ }
+ catch (...) {
+ continue;
+ }
+ di.serial = soadata.serial;
}
- di.serial = soadata.serial;
}
}
void lookup(const QType&, const DNSName& qdomain, int zoneId, DNSPacket* p = nullptr) override;
bool list(const DNSName& target, int id, bool include_disabled = false) override;
bool get(DNSResourceRecord&) override;
- void getAllDomains(vector<DomainInfo>* domains, bool include_disabled = false) override;
+ void getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled = false) override;
static DNSBackend* maker();
static std::mutex s_startup_lock;
return false;
}
-void GeoIPBackend::getAllDomains(vector<DomainInfo>* domains, bool include_disabled)
+void GeoIPBackend::getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled)
{
ReadLock rl(&s_state_lock);
void reload() override;
void rediscover(string* status = 0) override;
bool getDomainInfo(const DNSName& domain, DomainInfo& di, bool getSerial = true) override;
- void getAllDomains(vector<DomainInfo>* domains, bool include_disabled = false) override;
+ void getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled) override;
// dnssec support
bool doesDNSSEC() override { return d_dnssec; };
return true;
}
-void LMDBBackend::getAllDomains(vector<DomainInfo>* domains, bool include_disabled)
+void LMDBBackend::getAllDomains(vector<DomainInfo>* domains, bool doSerial, bool include_disabled)
{
domains->clear();
auto txn = d_tdomains->getROTransaction();
bool feedEnts3(int domain_id, const DNSName& domain, map<DNSName, bool>& nonterm, const NSEC3PARAMRecordContent& ns3prc, bool narrow) override;
bool replaceRRSet(uint32_t domain_id, const DNSName& qname, const QType& qt, const vector<DNSResourceRecord>& rrset) override;
- void getAllDomains(vector<DomainInfo>* domains, bool include_disabled = false) override;
+ void getAllDomains(vector<DomainInfo>* domains, bool doSerial, bool include_disabled) override;
void lookup(const QType& type, const DNSName& qdomain, int zoneId, DNSPacket* p = nullptr) override;
bool get(DNSResourceRecord& rr) override;
bool get(DNSZoneRecord& dzr) override;
return true;
}
- void getAllDomains(vector<DomainInfo>* domains, bool include_disabled = false) override
+ void getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled) override
{
if (f_get_all_domains == nullptr)
return;
return false;
}
-void RemoteBackend::getAllDomains(vector<DomainInfo>* domains, bool include_disabled)
+void RemoteBackend::getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled)
{
Json query = Json::object{
{"method", "getAllDomains"},
string directBackendCmd(const string& querystr) override;
bool searchRecords(const string& pattern, int maxResults, vector<DNSResourceRecord>& result) override;
bool searchComments(const string& pattern, int maxResults, vector<Comment>& result) override;
- void getAllDomains(vector<DomainInfo>* domains, bool include_disabled = false) override;
+ void getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled) override;
void getUpdatedMasters(vector<DomainInfo>* domains) override;
void alsoNotifies(const DNSName& domain, set<string>* ips) override;
void getUnfreshSlaveInfos(vector<DomainInfo>* domains) override;
BOOST_TEST_MESSAGE("Testing getAllDomains method");
vector<DomainInfo> result;
- be->getAllDomains(&result, true);
+ be->getAllDomains(&result, true, true);
di = result[0];
BOOST_CHECK_EQUAL(di.zone.toString(), "unit.test.");
TDI_t* domains = &(*domainInfo)[d_suffix];
vector<DomainInfo> allDomains;
- getAllDomains(&allDomains);
+ getAllDomains(&allDomains, true, false);
if (domains->size() == 0 && !mustDo("notify-on-startup")) {
for (vector<DomainInfo>::iterator di = allDomains.begin(); di != allDomains.end(); ++di) {
di->notified_serial = 0;
(*domainInfo)[d_suffix] = *domains;
}
-void TinyDNSBackend::getAllDomains(vector<DomainInfo>* domains, bool include_disabled)
+void TinyDNSBackend::getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled)
{
d_isAxfr = true;
d_isGetDomains = true;
while (get(rr)) {
if (rr.qtype.getCode() == QType::SOA && dupcheck.insert(rr.qname).second) {
- SOAData sd;
- fillSOAData(rr.content, sd);
-
DomainInfo di;
di.id = -1; //TODO: Check if this is ok.
di.backend = this;
di.zone = rr.qname;
- di.serial = sd.serial;
- di.notified_serial = sd.serial;
di.kind = DomainInfo::Master;
di.last_check = time(0);
+
+ if (getSerial) {
+ SOAData sd;
+ try {
+ fillSOAData(rr.content, sd);
+ di.serial = sd.serial;
+ }
+ catch (const PDNSException& e) {
+ di.serial = 0;
+ }
+ }
+
+ di.notified_serial = di.serial;
domains->push_back(di);
}
}
void lookup(const QType& qtype, const DNSName& qdomain, int zoneId, DNSPacket* pkt_p = nullptr) override;
bool list(const DNSName& target, int domain_id, bool include_disabled = false) override;
bool get(DNSResourceRecord& rr) override;
- void getAllDomains(vector<DomainInfo>* domains, bool include_disabled = false) override;
+ void getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled) override;
//Master mode operation
void getUpdatedMasters(vector<DomainInfo>* domains) override;
return true;
}
-void GSQLBackend::getAllDomains(vector<DomainInfo> *domains, bool include_disabled)
+void GSQLBackend::getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled)
{
DLOG(g_log<<"GSQLBackend retrieving all domains."<<endl);
}
}
- if(!row[2].empty()) {
+ if (getSerial && !row[2].empty()) {
SOAData sd;
- fillSOAData(row[2], sd);
- di.serial = sd.serial;
+ try {
+ fillSOAData(row[2], sd);
+ di.serial = sd.serial;
+ }
+ catch (const PDNSException& e) {
+ di.serial = 0;
+ }
}
+
try {
di.notified_serial = pdns_stou(row[5]);
di.last_check = pdns_stou(row[6]);
} catch(...) {
continue;
}
+
di.account = row[7];
di.backend = this;
-
+
domains->push_back(di);
}
d_getAllDomainsQuery_stmt->reset();
void lookup(const QType &, const DNSName &qdomain, int zoneId, DNSPacket *p=nullptr) override;
bool list(const DNSName &target, int domain_id, bool include_disabled=false) override;
bool get(DNSResourceRecord &r) override;
- void getAllDomains(vector<DomainInfo> *domains, bool include_disabled=false) override;
+ void getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled) override;
void alsoNotifies(const DNSName &domain, set<string> *ips) override;
bool startTransaction(const DNSName &domain, int domain_id=-1) override;
bool commitTransaction() override;
return ret;
}
-void DNSBackend::getAllDomains(vector<DomainInfo>* domains, bool include_disabled)
+void DNSBackend::getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled)
{
if (g_zoneCache.isEnabled()) {
g_log << Logger::Error << "One of the backends does not support zone caching. Put zone-cache-refresh-interval=0 in the config file to disable this cache." << endl;
return setDomainMetadata(name, kind, meta);
}
- virtual void getAllDomains(vector<DomainInfo>* domains, bool include_disabled = false);
+ virtual void getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled);
/** Determines if we are authoritative for a zone, and at what level */
virtual bool getAuth(const DNSName &target, SOAData *sd);
if (parts[1] == "*") {
vector<DomainInfo> domains;
- B.getAllDomains(&domains);
+ B.getAllDomains(&domains, true, false);
int total = 0;
int notified = 0;
UeberBackend B;
g_log<<Logger::Notice<<"Received request to list zones."<<endl;
vector<DomainInfo> domains;
- B.getAllDomains(&domains);
+ B.getAllDomains(&domains, false, false);
ostringstream ret;
int kindFilter = -1;
if (parts.size() > 1) {
vector<DomainInfo> domainInfo;
bool result = true;
- B.getAllDomains(&domainInfo);
+ B.getAllDomains(&domainInfo, false, false);
for(const DomainInfo& di : domainInfo) {
if (!quiet) {
cerr<<"Rectifying "<<di.zone<<": ";
auto& seenNames = seenInfos.get<0>();
auto& seenIds = seenInfos.get<1>();
- B.getAllDomains(&domainInfo, true);
+ B.getAllDomains(&domainInfo, true, true);
int errors=0;
for(auto di : domainInfo) {
if (checkZone(dk, B, di.zone) > 0) {
listKey(di, dk);
} else {
vector<DomainInfo> domainInfo;
- B.getAllDomains(&domainInfo, g_verbose);
+ B.getAllDomains(&domainInfo, false, g_verbose);
bool printHeader = true;
for (const auto& di : domainInfo) {
listKey(di, dk, printHeader);
UeberBackend B("default");
vector<DomainInfo> domains;
- B.getAllDomains(&domains, g_verbose);
+ B.getAllDomains(&domains, false, g_verbose);
int count = 0;
for (const auto& di: domains) {
UeberBackend B("default");
vector<DomainInfo> domainInfo;
- B.getAllDomains(&domainInfo);
+ B.getAllDomains(&domainInfo, false, false);
unsigned int zonesSecured=0, zoneErrors=0;
for(const DomainInfo& di : domainInfo) {
vector<DomainInfo> domains;
- tgt->getAllDomains(&domains, true);
+ tgt->getAllDomains(&domains, false, true);
if (domains.size()>0)
throw PDNSException("Target backend has zone(s), please clean it first");
- src->getAllDomains(&domains, true);
+ src->getAllDomains(&domains, false, true);
// iterate zones
for(const DomainInfo& di: domains) {
size_t nr,nc,nm,nk;
for (vector<DNSBackend*>::iterator i = backends.begin(); i != backends.end(); ++i )
{
vector<DomainInfo> zones;
- (*i)->getAllDomains(&zones, true);
+ (*i)->getAllDomains(&zones, false, true);
for(auto& di: zones) {
zone_indices.push_back({std::move(di.zone), (int)di.id}); // this cast should not be necessary
}
d_handle.parent=this;
}
-void UeberBackend::getAllDomains(vector<DomainInfo> *domains, bool include_disabled) {
+void UeberBackend::getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled)
+{
for (auto & backend : backends)
{
- backend->getAllDomains(domains, include_disabled);
+ backend->getAllDomains(domains, getSerial, include_disabled);
}
}
/** Load SOA info from backends, ignoring the cache.*/
bool getSOAUncached(const DNSName &domain, SOAData &sd);
bool get(DNSZoneRecord &r);
- void getAllDomains(vector<DomainInfo> *domains, bool include_disabled=false);
+ void getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled);
void getUnfreshSlaveInfos(vector<DomainInfo>* domains);
void getUpdatedMasters(vector<DomainInfo>* domains);
}
} else {
try {
- B.getAllDomains(&domains, true); // incl. disabled
+ B.getAllDomains(&domains, true, true); // incl. serial and disabled
} catch(const PDNSException &e) {
throw HttpInternalServerErrorException("Could not retrieve all domain information: " + e.reason);
}
map<int,DomainInfo>::iterator val;
Json::array doc;
- B.getAllDomains(&domains, true);
+ B.getAllDomains(&domains, false, true);
for(const DomainInfo& di: domains)
{