From: Pieter Lexis Date: Mon, 14 Aug 2017 14:46:28 +0000 (+0200) Subject: Use uint32_t for serial in calculateSOASerial X-Git-Tag: dnsdist-1.3.0~130^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f101300964ed8ab35064418ccb32d53bd6eb610c;p=thirdparty%2Fpdns.git Use uint32_t for serial in calculateSOASerial `time_t` can be bigger or be negative, which could lead to overflow/underflow issues. Closes #1010 --- diff --git a/modules/remotebackend/remotebackend.cc b/modules/remotebackend/remotebackend.cc index ef2fbb2c68..c3d694d11d 100644 --- a/modules/remotebackend/remotebackend.cc +++ b/modules/remotebackend/remotebackend.cc @@ -845,7 +845,7 @@ bool RemoteBackend::abortTransaction() { return true; } -bool RemoteBackend::calculateSOASerial(const DNSName& domain, const SOAData& sd, time_t& serial) { +bool RemoteBackend::calculateSOASerial(const DNSName& domain, const SOAData& sd, uint32_t& serial) { Json query = Json::object{ { "method", "calculateSOASerial" }, { "parameters", Json::object{ diff --git a/modules/remotebackend/remotebackend.hh b/modules/remotebackend/remotebackend.hh index b44af82c98..efec16bfdc 100644 --- a/modules/remotebackend/remotebackend.hh +++ b/modules/remotebackend/remotebackend.hh @@ -180,7 +180,7 @@ class RemoteBackend : public DNSBackend bool startTransaction(const DNSName& domain, int domain_id) override; bool commitTransaction() override; bool abortTransaction() override; - bool calculateSOASerial(const DNSName& domain, const SOAData& sd, time_t& serial) override; + bool calculateSOASerial(const DNSName& domain, const SOAData& sd, uint32_t& serial) override; bool setTSIGKey(const DNSName& name, const DNSName& algorithm, const string& content) override; bool deleteTSIGKey(const DNSName& name) override; bool getTSIGKeys(std::vector< struct TSIGKey > &keys) override; diff --git a/modules/remotebackend/test-remotebackend.cc b/modules/remotebackend/test-remotebackend.cc index 48a240ace1..aed51ff456 100644 --- a/modules/remotebackend/test-remotebackend.cc +++ b/modules/remotebackend/test-remotebackend.cc @@ -326,7 +326,7 @@ BOOST_AUTO_TEST_CASE(test_method_abortTransaction) { BOOST_AUTO_TEST_CASE(test_method_calculateSOASerial) { SOAData sd; - time_t serial; + uint32_t serial; be->getSOA(DNSName("unit.test."),sd); BOOST_CHECK(be->calculateSOASerial(DNSName("unit.test."),sd,serial)); diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc index 848fb260e1..24f2d00708 100644 --- a/pdns/backends/gsql/gsqlbackend.cc +++ b/pdns/backends/gsql/gsqlbackend.cc @@ -1506,7 +1506,7 @@ bool GSQLBackend::abortTransaction() return true; } -bool GSQLBackend::calculateSOASerial(const DNSName& domain, const SOAData& sd, time_t& serial) +bool GSQLBackend::calculateSOASerial(const DNSName& domain, const SOAData& sd, uint32_t& serial) { if (d_ZoneLastChangeQuery.empty()) { // query not set => fall back to default impl diff --git a/pdns/backends/gsql/gsqlbackend.hh b/pdns/backends/gsql/gsqlbackend.hh index 7a6fcff909..cd591076f0 100644 --- a/pdns/backends/gsql/gsqlbackend.hh +++ b/pdns/backends/gsql/gsqlbackend.hh @@ -207,7 +207,7 @@ public: bool updateEmptyNonTerminals(uint32_t domain_id, set& insert ,set& erase, bool remove) override; bool doesDNSSEC() override; - bool calculateSOASerial(const DNSName& domain, const SOAData& sd, time_t& serial) override; + bool calculateSOASerial(const DNSName& domain, const SOAData& sd, uint32_t& serial) override; bool replaceRRSet(uint32_t domain_id, const DNSName& qname, const QType& qt, const vector& rrset) override; bool listSubZone(const DNSName &zone, int domain_id) override; diff --git a/pdns/dnsbackend.cc b/pdns/dnsbackend.cc index 5fca2b903d..660d872efc 100644 --- a/pdns/dnsbackend.cc +++ b/pdns/dnsbackend.cc @@ -250,7 +250,7 @@ bool DNSBackend::getSOA(const DNSName &domain, SOAData &sd) if(!sd.serial) { // magic time! DLOG(L<list(domain, sd.domain_id))) { DLOG(L<& rrset) {