From: Fred Morcos Date: Mon, 9 Oct 2023 13:02:51 +0000 (+0200) Subject: Set the domain ID X-Git-Tag: rec-5.0.0-alpha2~10^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9ef17e137418086dc913f10bb7d31602ad2a54c5;p=thirdparty%2Fpdns.git Set the domain ID --- diff --git a/modules/geoipbackend/geoipbackend.cc b/modules/geoipbackend/geoipbackend.cc index 497d80c860..5341e1d854 100644 --- a/modules/geoipbackend/geoipbackend.cc +++ b/modules/geoipbackend/geoipbackend.cc @@ -19,6 +19,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -51,7 +52,7 @@ struct GeoIPService struct GeoIPDomain { - int id; + std::uint32_t id{}; DNSName domain; int ttl{}; map services; @@ -123,9 +124,10 @@ static bool validateMappingLookupFormats(const vector& formats) return true; } -bool GeoIPBackend::loadDomain(const YAML::Node& domain, unsigned int id, GeoIPDomain& dom) +bool GeoIPBackend::loadDomain(const YAML::Node& domain, std::uint32_t domainID, GeoIPDomain& dom) { try { + dom.id = domainID; dom.domain = DNSName(domain["domain"].as()); dom.ttl = domain["ttl"].as(); @@ -136,7 +138,7 @@ bool GeoIPBackend::loadDomain(const YAML::Node& domain, unsigned int id, GeoIPDo for (auto item = recs->second.begin(); item != recs->second.end(); item++) { auto rec = item->begin(); GeoIPDNSResourceRecord rr; - rr.domain_id = dom.id; + rr.domain_id = static_cast(dom.id); rr.ttl = dom.ttl; rr.qname = qname; if (rec->first.IsNull()) { @@ -260,18 +262,18 @@ bool GeoIPBackend::loadDomain(const YAML::Node& domain, unsigned int id, GeoIPDo // ensure we have parent in records DNSName name = item.first; while (name.chopOff() && name.isPartOf(dom.domain)) { - GeoIPDNSResourceRecord rr; if (dom.records.find(name) == dom.records.end() && (dom.services.count(name) == 0U)) { // don't ENT out a service! + GeoIPDNSResourceRecord resourceRecord; vector rrs; - rr.domain_id = dom.id; - rr.ttl = dom.ttl; - rr.qname = name; - rr.qtype = QType(0); // empty non terminal - rr.content = ""; - rr.auth = 1; - rr.weight = 100; - rr.has_weight = false; - rrs.push_back(rr); + resourceRecord.domain_id = static_cast(dom.id); + resourceRecord.ttl = dom.ttl; + resourceRecord.qname = name; + resourceRecord.qtype = QType(0); // empty non terminal + resourceRecord.content = ""; + resourceRecord.auth = true; + resourceRecord.weight = 100; + resourceRecord.has_weight = false; + rrs.push_back(resourceRecord); std::swap(dom.records[name], rrs); } } @@ -283,17 +285,17 @@ bool GeoIPBackend::loadDomain(const YAML::Node& domain, unsigned int id, GeoIPDo DNSName name = item.first; while (name.chopOff() && name.isPartOf(dom.domain)) { if (dom.records.find(name) == dom.records.end()) { - GeoIPDNSResourceRecord rr; + GeoIPDNSResourceRecord resourceRecord; vector rrs; - rr.domain_id = dom.id; - rr.ttl = dom.ttl; - rr.qname = name; - rr.qtype = QType(0); - rr.content = ""; - rr.auth = 1; - rr.weight = 100; - rr.has_weight = false; - rrs.push_back(rr); + resourceRecord.domain_id = static_cast(dom.id); + resourceRecord.ttl = dom.ttl; + resourceRecord.qname = name; + resourceRecord.qtype = QType(0); + resourceRecord.content = ""; + resourceRecord.auth = true; + resourceRecord.weight = 100; + resourceRecord.has_weight = false; + rrs.push_back(resourceRecord); std::swap(dom.records[name], rrs); } } @@ -409,8 +411,7 @@ void GeoIPBackend::initialize() for (YAML::const_iterator _domain = config["domains"].begin(); _domain != config["domains"].end(); _domain++) { GeoIPDomain dom; - auto id = tmp_domains.size(); - if (loadDomain(*_domain, id, dom)) { + if (loadDomain(*_domain, tmp_domains.size(), dom)) { tmp_domains.push_back(std::move(dom)); } } diff --git a/modules/geoipbackend/geoipbackend.hh b/modules/geoipbackend/geoipbackend.hh index 851927628d..a2d3c7b994 100644 --- a/modules/geoipbackend/geoipbackend.hh +++ b/modules/geoipbackend/geoipbackend.hh @@ -22,6 +22,7 @@ #pragma once #include "pdns/namespaces.hh" +#include #include #include #include @@ -82,7 +83,7 @@ private: bool d_dnssec{}; bool hasDNSSECkey(const DNSName& name); bool lookup_static(const GeoIPDomain& dom, const DNSName& search, const QType& qtype, const DNSName& qdomain, const Netmask& addr, GeoIPNetmask& gl); - bool loadDomain(const YAML::Node& domain, unsigned int /* id */, GeoIPDomain& dom); + bool loadDomain(const YAML::Node& domain, std::uint32_t domainID, GeoIPDomain& dom); void loadDomainsFromDirectory(const std::string& dir, vector& domains); vector d_result; vector d_files;