`time_t` can be bigger or be negative, which could lead to overflow/underflow issues.
Closes #1010
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{
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;
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));
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
bool updateEmptyNonTerminals(uint32_t domain_id, set<DNSName>& insert ,set<DNSName>& 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<DNSResourceRecord>& rrset) override;
bool listSubZone(const DNSName &zone, int domain_id) override;
if(!sd.serial) { // magic time!
DLOG(L<<Logger::Warning<<"Doing SOA serial number autocalculation for "<<rr.qname<<endl);
- time_t serial;
+ uint32_t serial = 0;
if (calculateSOASerial(domain, sd, serial)) {
sd.serial = serial;
//DLOG(L<<"autocalculated soa serialnumber for "<<rr.qname<<" is "<<newest<<endl);
* \param sd Information about the SOA record already available
* \param serial Output parameter. Only inspected when we return true
*/
-bool DNSBackend::calculateSOASerial(const DNSName& domain, const SOAData& sd, time_t& serial)
+bool DNSBackend::calculateSOASerial(const DNSName& domain, const SOAData& sd, uint32_t& serial)
{
// we do this by listing the domain and taking the maximum last modified timestamp
DNSResourceRecord i;
- time_t newest=0;
+ uint32_t newest=0;
if(!(this->list(domain, sd.domain_id))) {
DLOG(L<<Logger::Warning<<"Backend error trying to determine magic serial number of zone '"<<domain<<"'"<<endl);
virtual bool getSOA(const DNSName &name, SOAData &soadata);
//! Calculates a SOA serial for the zone and stores it in the third argument.
- virtual bool calculateSOASerial(const DNSName& domain, const SOAData& sd, time_t& serial);
+ virtual bool calculateSOASerial(const DNSName& domain, const SOAData& sd, uint32_t& serial);
virtual bool replaceRRSet(uint32_t domain_id, const DNSName& qname, const QType& qt, const vector<DNSResourceRecord>& rrset)
{