From: Fred Morcos Date: Mon, 15 Jan 2024 15:00:54 +0000 (+0100) Subject: Format dnsbackend.hh and dnsbackend.cc X-Git-Tag: dnsdist-1.9.0-rc1~17^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=02789fe04549600202df3c592090849471bbf5da;p=thirdparty%2Fpdns.git Format dnsbackend.hh and dnsbackend.cc --- diff --git a/.not-formatted b/.not-formatted index b299f383e8..65bafc5e61 100644 --- a/.not-formatted +++ b/.not-formatted @@ -33,8 +33,6 @@ ./pdns/distributor.hh ./pdns/dns.cc ./pdns/dns.hh -./pdns/dnsbackend.cc -./pdns/dnsbackend.hh ./pdns/dnsbulktest.cc ./pdns/dnscrypt.cc ./pdns/dnscrypt.hh diff --git a/pdns/dnsbackend.cc b/pdns/dnsbackend.cc index bbb546079e..8fb9e370c4 100644 --- a/pdns/dnsbackend.cc +++ b/pdns/dnsbackend.cc @@ -42,52 +42,52 @@ extern StatBag S; // this is so the geoipbackend can set this pointer if loaded for lua-record.cc std::function g_getGeo; -bool DNSBackend::getAuth(const DNSName &target, SOAData *sd) +bool DNSBackend::getAuth(const DNSName& target, SOAData* sd) { return this->getSOA(target, *sd); } -void DNSBackend::setArgPrefix(const string &prefix) +void DNSBackend::setArgPrefix(const string& prefix) { - d_prefix=prefix; + d_prefix = prefix; } -bool DNSBackend::mustDo(const string &key) +bool DNSBackend::mustDo(const string& key) { - return arg().mustDo(d_prefix+"-"+key); + return arg().mustDo(d_prefix + "-" + key); } -const string &DNSBackend::getArg(const string &key) +const string& DNSBackend::getArg(const string& key) { - return arg()[d_prefix+"-"+key]; + return arg()[d_prefix + "-" + key]; } -int DNSBackend::getArgAsNum(const string &key) +int DNSBackend::getArgAsNum(const string& key) { - return arg().asNum(d_prefix+"-"+key); + return arg().asNum(d_prefix + "-" + key); } -void BackendFactory::declare(const string &suffix, const string ¶m, const string &help, const string &value) +void BackendFactory::declare(const string& suffix, const string& param, const string& help, const string& value) { - string fullname=d_name+suffix+"-"+param; - arg().set(fullname,help)=value; - arg().setDefault(fullname,value); + string fullname = d_name + suffix + "-" + param; + arg().set(fullname, help) = value; + arg().setDefault(fullname, value); } -const string &BackendFactory::getName() const +const string& BackendFactory::getName() const { return d_name; } -BackendMakerClass &BackendMakers() +BackendMakerClass& BackendMakers() { static BackendMakerClass bmc; return bmc; } -void BackendMakerClass::report(BackendFactory *bf) +void BackendMakerClass::report(BackendFactory* bf) { - d_repository[bf->getName()]=bf; + d_repository[bf->getName()] = bf; } void BackendMakerClass::clear() @@ -105,7 +105,7 @@ vector BackendMakerClass::getModules() load_all(); vector ret; // copy(d_repository.begin(), d_repository.end(),back_inserter(ret)); - for(d_repository_t::const_iterator i=d_repository.begin();i!=d_repository.end();++i) + for (d_repository_t::const_iterator i = d_repository.begin(); i != d_repository.end(); ++i) ret.push_back(i->first); return ret; } @@ -113,60 +113,58 @@ vector BackendMakerClass::getModules() void BackendMakerClass::load_all() { auto directoryError = pdns::visit_directory(arg()["module-dir"], [this]([[maybe_unused]] ino_t inodeNumber, const std::string_view& name) { - if (boost::starts_with(name, "lib") && - name.size() > 13 && - boost::ends_with(name, "backend.so")) { + if (boost::starts_with(name, "lib") && name.size() > 13 && boost::ends_with(name, "backend.so")) { load(std::string(name)); } return true; }); if (directoryError) { - g_log< parts; - stringtok(parts,instr,", "); + stringtok(parts, instr, ", "); for (const auto& part : parts) if (count(parts.begin(), parts.end(), part) > 1) throw ArgException("Refusing to launch multiple backends with the same name '" + part + "', verify all 'launch' statements in your configuration"); - for(const auto & part : parts) { + for (const auto& part : parts) { string module, name; - vectorpparts; - stringtok(pparts,part,": "); - module=pparts[0]; - if(pparts.size()>1) - name="-"+pparts[1]; + vector pparts; + stringtok(pparts, part, ": "); + module = pparts[0]; + if (pparts.size() > 1) + name = "-" + pparts[1]; - if(d_repository.find(module)==d_repository.end()) { + if (d_repository.find(module) == d_repository.end()) { // this is *so* userfriendly load(module); - if(d_repository.find(module)==d_repository.end()) - throw ArgException("Trying to launch unknown backend '"+module+"'"); + if (d_repository.find(module) == d_repository.end()) + throw ArgException("Trying to launch unknown backend '" + module + "'"); } d_repository[module]->declareArguments(name); d_instances.emplace_back(module, name); @@ -180,7 +178,7 @@ size_t BackendMakerClass::numLauncheable() const vector> BackendMakerClass::all(bool metadataOnly) { - if(d_instances.empty()) { + if (d_instances.empty()) { throw PDNSException("No database backends configured for launch, unable to function"); } @@ -200,12 +198,13 @@ vector> BackendMakerClass::all(bool metadataOnly) ret.push_back(std::move(made)); } } - catch(const PDNSException &ae) { + catch (const PDNSException& ae) { g_log << Logger::Error << "Caught an exception instantiating a backend (" << current << "): " << ae.reason << endl; g_log << Logger::Error << "Cleaning up" << endl; ret.clear(); throw; - } catch(...) { + } + catch (...) { // and cleanup g_log << Logger::Error << "Caught an exception instantiating a backend (" << current << "), cleaning up" << endl; ret.clear(); @@ -230,13 +229,13 @@ vector> BackendMakerClass::all(bool metadataOnly) \param sd SOAData which is filled with the SOA details \param unmodifiedSerial bool if set, serial will be returned as stored in the backend (maybe 0) */ -bool DNSBackend::getSOA(const DNSName &domain, SOAData &sd) +bool DNSBackend::getSOA(const DNSName& domain, SOAData& sd) { - this->lookup(QType(QType::SOA),domain,-1); + this->lookup(QType(QType::SOA), domain, -1); S.inc("backend-queries"); DNSResourceRecord rr; - int hits=0; + int hits = 0; sd.db = nullptr; @@ -267,18 +266,19 @@ bool DNSBackend::get(DNSZoneRecord& dzr) { // cout<<"DNSBackend::get(DNSZoneRecord&) called - translating into DNSResourceRecord query"<get(rr)) + if (!this->get(rr)) return false; dzr.auth = rr.auth; dzr.domain_id = rr.domain_id; dzr.scopeMask = rr.scopeMask; - if(rr.qtype.getCode() == QType::TXT && !rr.content.empty() && rr.content[0]!='"') - rr.content = "\""+ rr.content + "\""; + if (rr.qtype.getCode() == QType::TXT && !rr.content.empty() && rr.content[0] != '"') + rr.content = "\"" + rr.content + "\""; try { dzr.dr = DNSRecord(rr); } - catch(...) { - while(this->get(rr)); + catch (...) { + while (this->get(rr)) + ; throw; } return true; @@ -307,7 +307,7 @@ void fillSOAData(const DNSZoneRecord& in, SOAData& sd) sd.domain_id = in.domain_id; sd.ttl = in.dr.d_ttl; - auto src=getRR(in.dr); + auto src = getRR(in.dr); sd.nameserver = src->d_mname; sd.rname = src->d_rname; sd.serial = src->d_st.serial; @@ -319,18 +319,18 @@ void fillSOAData(const DNSZoneRecord& in, SOAData& sd) std::shared_ptr makeSOAContent(const SOAData& sd) { - struct soatimes st; - st.serial = sd.serial; - st.refresh = sd.refresh; - st.retry = sd.retry; - st.expire = sd.expire; - st.minimum = sd.minimum; - return std::make_shared(sd.nameserver, sd.rname, st); + struct soatimes st; + st.serial = sd.serial; + st.refresh = sd.refresh; + st.retry = sd.retry; + st.expire = sd.expire; + st.minimum = sd.minimum; + return std::make_shared(sd.nameserver, sd.rname, st); } -void fillSOAData(const string &content, SOAData &data) +void fillSOAData(const string& content, SOAData& data) { - vectorparts; + vector parts; parts.reserve(7); stringtok(parts, content); @@ -343,7 +343,7 @@ void fillSOAData(const string &content, SOAData &data) pdns::checked_stoi_into(data.expire, parts.at(5)); pdns::checked_stoi_into(data.minimum, parts.at(6)); } - catch(const std::out_of_range& oor) { + catch (const std::out_of_range& oor) { throw PDNSException("Out of range exception parsing '" + content + "'"); } } diff --git a/pdns/dnsbackend.hh b/pdns/dnsbackend.hh index 625a478072..d099d537ae 100644 --- a/pdns/dnsbackend.hh +++ b/pdns/dnsbackend.hh @@ -51,7 +51,8 @@ struct SOAData; struct DomainInfo { - DomainInfo() : last_check(0), backend(nullptr), id(0), notified_serial(0), receivedNotify(false), serial(0), kind(DomainInfo::Native) {} + DomainInfo() : + last_check(0), backend(nullptr), id(0), notified_serial(0), receivedNotify(false), serial(0), kind(DomainInfo::Native) {} DNSName zone; DNSName catalog; @@ -59,7 +60,7 @@ struct DomainInfo string options; string account; vector primaries; - DNSBackend *backend{}; + DNSBackend* backend{}; uint32_t id{}; uint32_t notified_serial{}; @@ -84,12 +85,12 @@ struct DomainInfo All } kind; - [[nodiscard]] const char *getKindString() const + [[nodiscard]] const char* getKindString() const { return DomainInfo::getKindString(kind); } - static const char *getKindString(enum DomainKind kind) + static const char* getKindString(enum DomainKind kind) { const char* kinds[] = {"Master", "Slave", "Native", "Producer", "Consumer", "All"}; return kinds[kind]; @@ -123,18 +124,20 @@ struct DomainInfo } }; -struct TSIGKey { - DNSName name; - DNSName algorithm; - std::string key; +struct TSIGKey +{ + DNSName name; + DNSName algorithm; + std::string key; }; -struct AutoPrimary { - AutoPrimary(const string& new_ip, const string& new_nameserver, const string& new_account) : - ip(new_ip), nameserver(new_nameserver), account(new_account){}; - std::string ip; - std::string nameserver; - std::string account; +struct AutoPrimary +{ + AutoPrimary(const string& new_ip, const string& new_nameserver, const string& new_account) : + ip(new_ip), nameserver(new_nameserver), account(new_account){}; + std::string ip; + std::string nameserver; + std::string account; }; class DNSPacket; @@ -154,21 +157,21 @@ class DNSBackend { public: //! lookup() initiates a lookup. A lookup without results should not throw! - virtual void lookup(const QType &qtype, const DNSName &qdomain, int zoneId=-1, DNSPacket *pkt_p=nullptr)=0; - virtual bool get(DNSResourceRecord &)=0; //!< retrieves one DNSResource record, returns false if no more were available - virtual bool get(DNSZoneRecord &r); + virtual void lookup(const QType& qtype, const DNSName& qdomain, int zoneId = -1, DNSPacket* pkt_p = nullptr) = 0; + virtual bool get(DNSResourceRecord&) = 0; //!< retrieves one DNSResource record, returns false if no more were available + virtual bool get(DNSZoneRecord& r); //! Initiates a list of the specified domain /** Once initiated, DNSResourceRecord objects can be retrieved using get(). Should return false if the backend does not consider itself responsible for the id passed. \param domain_id ID of which a list is requested */ - virtual bool list(const DNSName &target, int domain_id, bool include_disabled=false)=0; + virtual bool list(const DNSName& target, int domain_id, bool include_disabled = false) = 0; virtual ~DNSBackend() = default; //! fills the soadata struct with the SOA details. Returns false if there is no SOA. - virtual bool getSOA(const DNSName &name, SOAData &soadata); + virtual bool getSOA(const DNSName& name, SOAData& soadata); virtual bool replaceRRSet(uint32_t /* domain_id */, const DNSName& /* qname */, const QType& /* qt */, const vector& /* rrset */) { @@ -211,7 +214,8 @@ public: /** Determines if we are authoritative for a zone, and at what level */ virtual bool getAuth(const DNSName& target, SOAData* /* sd */); - struct KeyData { + struct KeyData + { std::string content; unsigned int id{0}; unsigned int flags{0}; @@ -400,7 +404,7 @@ public: } //! Can be called to seed the getArg() function with a prefix - void setArgPrefix(const string &prefix); + void setArgPrefix(const string& prefix); //! Add an entry for a super primary virtual bool autoPrimaryAdd(const struct AutoPrimary& /* primary */) @@ -462,10 +466,11 @@ public: } const string& getPrefix() { return d_prefix; }; + protected: - bool mustDo(const string &key); - const string &getArg(const string &key); - int getArgAsNum(const string &key); + bool mustDo(const string& key); + const string& getArg(const string& key); + int getArgAsNum(const string& key); private: string d_prefix; @@ -474,10 +479,11 @@ private: class BackendFactory { public: - BackendFactory(const string &name) : d_name(name) {} + BackendFactory(const string& name) : + d_name(name) {} virtual ~BackendFactory() = default; - virtual DNSBackend *make(const string &suffix)=0; - virtual DNSBackend *makeMetadataOnly(const string &suffix) + virtual DNSBackend* make(const string& suffix) = 0; + virtual DNSBackend* makeMetadataOnly(const string& suffix) { return this->make(suffix); } @@ -485,7 +491,7 @@ public: [[nodiscard]] const string& getName() const; protected: - void declare(const string &suffix, const string ¶m, const string &explanation, const string &value); + void declare(const string& suffix, const string& param, const string& explanation, const string& value); private: const string d_name; @@ -494,34 +500,35 @@ private: class BackendMakerClass { public: - void report(BackendFactory *bf); - void launch(const string &instr); - vector> all(bool metadataOnly=false); - void load(const string &module); + void report(BackendFactory* bf); + void launch(const string& instr); + vector> all(bool metadataOnly = false); + void load(const string& module); [[nodiscard]] size_t numLauncheable() const; vector getModules(); void clear(); private: void load_all(); - using d_repository_t = map; + using d_repository_t = map; d_repository_t d_repository; - vector >d_instances; + vector> d_instances; }; -extern BackendMakerClass &BackendMakers(); +extern BackendMakerClass& BackendMakers(); //! Exception that can be thrown by a DNSBackend to indicate a failure class DBException : public PDNSException { public: - DBException(const string &reason_) : PDNSException(reason_){} + DBException(const string& reason_) : + PDNSException(reason_) {} }; - struct SOAData { - SOAData() : domain_id(-1) {}; + SOAData() : + domain_id(-1){}; DNSName qname; DNSName nameserver; @@ -532,14 +539,14 @@ struct SOAData uint32_t retry{}; uint32_t expire{}; uint32_t minimum{}; - DNSBackend *db{}; + DNSBackend* db{}; int domain_id{}; [[nodiscard]] uint32_t getNegativeTTL() const { return min(ttl, minimum); } }; /** helper function for both DNSPacket and addSOARecord() - converts a line into a struct, for easier parsing */ -void fillSOAData(const string &content, SOAData &data); +void fillSOAData(const string& content, SOAData& data); // same but more karmic void fillSOAData(const DNSZoneRecord& in, SOAData& data); // the reverse