]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Correctly return the previous serial number in X-PDNS-Old-Serial.
authorMiod Vallat <miod.vallat@powerdns.com>
Fri, 13 Jun 2025 08:37:28 +0000 (10:37 +0200)
committerMiod Vallat <miod.vallat@powerdns.com>
Fri, 13 Jun 2025 08:37:28 +0000 (10:37 +0200)
pdns/ws-auth.cc
regression-tests.api/test_Zones.py

index 5ec8c2c9cd04fd9740100656a617953e29b036e7..f1d0bf90639945d801c99fa56b3c3453bca54fbb 100644 (file)
@@ -2441,6 +2441,9 @@ static void patchZone(UeberBackend& backend, const ZoneName& zonename, DomainInf
 
     // edit SOA (if needed)
     if (!zone_disabled && !soa_edit_api_kind.empty() && !soa_edit_done) {
+      // return old serial in headers, before changing it
+      resp->headers["X-PDNS-Old-Serial"] = std::to_string(soaData.serial);
+
       DNSResourceRecord resourceRecord;
       if (makeIncreasedSOARecord(soaData, soa_edit_api_kind, soa_edit_kind, resourceRecord)) {
         if (!domainInfo.backend->replaceRRSet(domainInfo.id, resourceRecord.qname, resourceRecord.qtype, vector<DNSResourceRecord>(1, resourceRecord))) {
@@ -2448,9 +2451,7 @@ static void patchZone(UeberBackend& backend, const ZoneName& zonename, DomainInf
         }
       }
 
-      // return old and new serials in headers
-      resp->headers["X-PDNS-Old-Serial"] = std::to_string(soaData.serial);
-      fillSOAData(resourceRecord.content, soaData);
+      // return new serial in headers
       resp->headers["X-PDNS-New-Serial"] = std::to_string(soaData.serial);
     }
   }
index 6538c2ee671b7a5aa2b36b9b0a25d1812c134655..8a4871a988b1252fcd95a548008b3372667ec931 100644 (file)
@@ -298,13 +298,15 @@ class AuthZones(ApiTestCase, AuthZonesHelperMixin):
             ]
         }
         payload = {'rrsets': [rrset]}
-        self.session.patch(
+        r = self.session.patch(
             self.url("/api/v1/servers/localhost/zones/" + data['id']),
             data=json.dumps(payload),
             headers={'content-type': 'application/json'})
         data = self.get_zone(data['id'])
         soa_serial = get_first_rec(data, name, 'SOA')['content'].split(' ')[2]
         self.assertEqual(soa_serial[-2:], '02')
+        self.assertEqual(r.headers['X-PDNS-Old-Serial'][-2:], '01')
+        self.assertEqual(r.headers['X-PDNS-New-Serial'][-2:], '02')
 
     def test_create_zone_with_records(self):
         name = unique_zone_name()