From: Fred Morcos Date: Sun, 29 Oct 2023 16:13:27 +0000 (+0100) Subject: Cleanup UeberBackend::searchRecords and ::searchResources X-Git-Tag: rec-5.0.0-beta1~16^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fd9af6ecfaad49423925f3c2b3856537e7d64a39;p=thirdparty%2Fpdns.git Cleanup UeberBackend::searchRecords and ::searchResources This required more changes in other places to change maxResults from int to size_t. --- diff --git a/modules/bindbackend/bindbackend2.cc b/modules/bindbackend/bindbackend2.cc index 1a0b01a578..67ea04c9bf 100644 --- a/modules/bindbackend/bindbackend2.cc +++ b/modules/bindbackend/bindbackend2.cc @@ -1447,7 +1447,7 @@ bool Bind2Backend::createSlaveDomain(const string& ip, const DNSName& domain, co return true; } -bool Bind2Backend::searchRecords(const string& pattern, int maxResults, vector& result) +bool Bind2Backend::searchRecords(const string& pattern, size_t maxResults, vector& result) { SimpleMatch sm(pattern, true); static bool mustlog = ::arg().mustDo("query-logging"); @@ -1469,7 +1469,7 @@ bool Bind2Backend::searchRecords(const string& pattern, int maxResults, vector rhandle = h.d_records.get(); - for (recordstorage_t::const_iterator ri = rhandle->begin(); result.size() < static_cast::size_type>(maxResults) && ri != rhandle->end(); ri++) { + for (recordstorage_t::const_iterator ri = rhandle->begin(); result.size() < maxResults && ri != rhandle->end(); ri++) { DNSName name = ri->qname.empty() ? i.d_name : (ri->qname + i.d_name); if (sm.match(name) || sm.match(ri->content)) { DNSResourceRecord r; diff --git a/modules/bindbackend/bindbackend2.hh b/modules/bindbackend/bindbackend2.hh index 7bd14f7d0b..5e4cc29f3c 100644 --- a/modules/bindbackend/bindbackend2.hh +++ b/modules/bindbackend/bindbackend2.hh @@ -205,7 +205,7 @@ public: bool commitTransaction() override; bool abortTransaction() override; void alsoNotifies(const DNSName& domain, set* ips) override; - bool searchRecords(const string& pattern, int maxResults, vector& result) override; + bool searchRecords(const string& pattern, size_t maxResults, vector& result) override; // the DNSSEC related (getDomainMetadata has broader uses too) bool getAllDomainMetadata(const DNSName& name, std::map>& meta) override; diff --git a/modules/remotebackend/remotebackend.cc b/modules/remotebackend/remotebackend.cc index 8fa086ab6b..e49d6130cf 100644 --- a/modules/remotebackend/remotebackend.cc +++ b/modules/remotebackend/remotebackend.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 @@ -830,11 +831,16 @@ string RemoteBackend::directBackendCmd(const string& querystr) return asString(answer["result"]); } -bool RemoteBackend::searchRecords(const string& pattern, int maxResults, vector& result) +bool RemoteBackend::searchRecords(const string& pattern, size_t maxResults, vector& result) { + const auto intMax = static_cast(std::numeric_limits::max()); + if (maxResults > intMax) { + throw std::out_of_range("Remote backend: length of list of result (" + std::to_string(maxResults) + ") is larger than what the JSON library supports for serialization (" + std::to_string(intMax) + ")"); + } + Json query = Json::object{ {"method", "searchRecords"}, - {"parameters", Json::object{{"pattern", pattern}, {"maxResults", maxResults}}}}; + {"parameters", Json::object{{"pattern", pattern}, {"maxResults", static_cast(maxResults)}}}}; Json answer; if (!this->send(query) || !this->recv(answer)) { @@ -866,7 +872,7 @@ bool RemoteBackend::searchRecords(const string& pattern, int maxResults, vector< return true; } -bool RemoteBackend::searchComments(const string& /* pattern */, int /* maxResults */, vector& /* result */) +bool RemoteBackend::searchComments(const string& /* pattern */, size_t /* maxResults */, vector& /* result */) { // FIXME: Implement Comment API return false; diff --git a/modules/remotebackend/remotebackend.hh b/modules/remotebackend/remotebackend.hh index 23c7be638a..067c7776c9 100644 --- a/modules/remotebackend/remotebackend.hh +++ b/modules/remotebackend/remotebackend.hh @@ -199,8 +199,8 @@ public: bool deleteTSIGKey(const DNSName& name) override; bool getTSIGKeys(std::vector& keys) override; string directBackendCmd(const string& querystr) override; - bool searchRecords(const string& pattern, int maxResults, vector& result) override; - bool searchComments(const string& pattern, int maxResults, vector& result) override; + bool searchRecords(const string& pattern, size_t maxResults, vector& result) override; + bool searchComments(const string& pattern, size_t maxResults, vector& result) override; void getAllDomains(vector* domains, bool getSerial, bool include_disabled) override; void getUpdatedMasters(vector& domains, std::unordered_set& catalogs, CatalogHashMap& catalogHashes) override; void getUnfreshSlaveInfos(vector* domains) override; diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc index db0b7acee3..e546c5dffc 100644 --- a/pdns/backends/gsql/gsqlbackend.cc +++ b/pdns/backends/gsql/gsqlbackend.cc @@ -2075,7 +2075,7 @@ string GSQLBackend::pattern2SQLPattern(const string &pattern) return escaped_pattern; } -bool GSQLBackend::searchRecords(const string &pattern, int maxResults, vector& result) +bool GSQLBackend::searchRecords(const string &pattern, size_t maxResults, vector& result) { d_qname.clear(); string escaped_pattern = pattern2SQLPattern(pattern); @@ -2111,7 +2111,7 @@ bool GSQLBackend::searchRecords(const string &pattern, int maxResults, vector& result) +bool GSQLBackend::searchComments(const string &pattern, size_t maxResults, vector& result) { Comment c; string escaped_pattern = pattern2SQLPattern(pattern); diff --git a/pdns/backends/gsql/gsqlbackend.hh b/pdns/backends/gsql/gsqlbackend.hh index 9ba76db92d..05e44571c0 100644 --- a/pdns/backends/gsql/gsqlbackend.hh +++ b/pdns/backends/gsql/gsqlbackend.hh @@ -29,7 +29,7 @@ bool isDnssecDomainMetadata (const string& name); -/* +/* GSQLBackend is a generic backend used by other sql backends */ class GSQLBackend : public DNSBackend @@ -41,7 +41,7 @@ public: freeStatements(); d_db.reset(); } - + void setDB(SSql *db) { freeStatements(); @@ -66,7 +66,7 @@ protected: d_InfoOfAllSlaveDomainsQuery_stmt = d_db->prepare(d_InfoOfAllSlaveDomainsQuery, 0); d_SuperMasterInfoQuery_stmt = d_db->prepare(d_SuperMasterInfoQuery, 2); d_GetSuperMasterIPs_stmt = d_db->prepare(d_GetSuperMasterIPs, 2); - d_AddSuperMaster_stmt = d_db->prepare(d_AddSuperMaster, 3); + d_AddSuperMaster_stmt = d_db->prepare(d_AddSuperMaster, 3); d_RemoveAutoPrimary_stmt = d_db->prepare(d_RemoveAutoPrimaryQuery, 2); d_ListAutoPrimaries_stmt = d_db->prepare(d_ListAutoPrimariesQuery, 0); d_InsertZoneQuery_stmt = d_db->prepare(d_InsertZoneQuery, 4); @@ -237,7 +237,7 @@ public: bool getAllDomainMetadata(const DNSName& name, std::map >& meta) override; bool getDomainMetadata(const DNSName& name, const std::string& kind, std::vector& meta) override; bool setDomainMetadata(const DNSName& name, const std::string& kind, const std::vector& meta) override; - + bool removeDomainKey(const DNSName& name, unsigned int id) override; bool activateDomainKey(const DNSName& name, unsigned int id) override; bool deactivateDomainKey(const DNSName& name, unsigned int id) override; @@ -254,8 +254,8 @@ public: bool feedComment(const Comment& comment) override; bool replaceComments(const uint32_t domain_id, const DNSName& qname, const QType& qt, const vector& comments) override; string directBackendCmd(const string &query) override; - bool searchRecords(const string &pattern, int maxResults, vector& result) override; - bool searchComments(const string &pattern, int maxResults, vector& result) override; + bool searchRecords(const string &pattern, size_t maxResults, vector& result) override; + bool searchComments(const string &pattern, size_t maxResults, vector& result) override; protected: string pattern2SQLPattern(const string& pattern); diff --git a/pdns/dnsbackend.hh b/pdns/dnsbackend.hh index 12e989ad99..c1fc959c7b 100644 --- a/pdns/dnsbackend.hh +++ b/pdns/dnsbackend.hh @@ -22,6 +22,7 @@ #pragma once #include +#include class DNSPacket; #include "utility.hh" @@ -449,13 +450,13 @@ public: } //! Search for records, returns true if search was done successfully. - virtual bool searchRecords(const string& /* pattern */, int /* maxResults */, vector& /* result */) + virtual bool searchRecords(const string& /* pattern */, size_t /* maxResults */, vector& /* result */) { return false; } //! Search for comments, returns true if search was done successfully. - virtual bool searchComments(const string& /* pattern */, int /* maxResults */, vector& /* result */) + virtual bool searchComments(const string& /* pattern */, size_t /* maxResults */, vector& /* result */) { return false; } diff --git a/pdns/ueberbackend.cc b/pdns/ueberbackend.cc index 4b7d84c30b..5ba73e7724 100644 --- a/pdns/ueberbackend.cc +++ b/pdns/ueberbackend.cc @@ -860,22 +860,22 @@ bool UeberBackend::deleteTSIGKey(const DNSName& name) // API Search // -bool UeberBackend::searchRecords(const string& pattern, int maxResults, vector& result) +bool UeberBackend::searchRecords(const string& pattern, size_t maxResults, vector& result) { bool ret = false; - for (auto i = backends.begin(); result.size() < static_cast::size_type>(maxResults) && i != backends.end(); ++i) { - if ((*i)->searchRecords(pattern, maxResults - result.size(), result)) { + for (auto backend = backends.begin(); result.size() < maxResults && backend != backends.end(); ++backend) { + if ((*backend)->searchRecords(pattern, maxResults - result.size(), result)) { ret = true; } } return ret; } -bool UeberBackend::searchComments(const string& pattern, int maxResults, vector& result) +bool UeberBackend::searchComments(const string& pattern, size_t maxResults, vector& result) { bool ret = false; - for (auto i = backends.begin(); result.size() < static_cast::size_type>(maxResults) && i != backends.end(); ++i) { - if ((*i)->searchComments(pattern, maxResults - result.size(), result)) { + for (auto backend = backends.begin(); result.size() < maxResults && backend != backends.end(); ++backend) { + if ((*backend)->searchComments(pattern, maxResults - result.size(), result)) { ret = true; } } diff --git a/pdns/ueberbackend.hh b/pdns/ueberbackend.hh index ada36f129b..07c24310b7 100644 --- a/pdns/ueberbackend.hh +++ b/pdns/ueberbackend.hh @@ -133,8 +133,8 @@ public: bool getTSIGKeys(std::vector& keys); bool deleteTSIGKey(const DNSName& name); - bool searchRecords(const string& pattern, int maxResults, vector& result); - bool searchComments(const string& pattern, int maxResults, vector& result); + bool searchRecords(const string& pattern, vector::size_type maxResults, vector& result); + bool searchComments(const string& pattern, size_t maxResults, vector& result); void updateZoneCache(); diff --git a/pdns/ws-auth.cc b/pdns/ws-auth.cc index 20bac3e349..76a2a0c4f3 100644 --- a/pdns/ws-auth.cc +++ b/pdns/ws-auth.cc @@ -2384,8 +2384,8 @@ static void apiServerSearchData(HttpRequest* req, HttpResponse* resp) { string sMax = req->getvars["max"]; string sObjectType = req->getvars["object_type"]; - int maxEnts = 100; - int ents = 0; + size_t maxEnts = 100; + size_t ents = 0; // the following types of data can be searched for using the api enum class ObjectType