]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Merge pull request #15669 from miodvallat/serial_keyer dnsdist-2.1.0-alpha0
authorMiod Vallat <miod.vallat@powerdns.com>
Thu, 26 Jun 2025 15:30:27 +0000 (17:30 +0200)
committerGitHub <noreply@github.com>
Thu, 26 Jun 2025 15:30:27 +0000 (17:30 +0200)
Increase zone serial number after zone key operations

1  2 
pdns/ws-auth.cc

diff --cc pdns/ws-auth.cc
index 7f126ac8bba1774d29934c148b54b68f8d6b3b01,6963409dcf08485986197476ddff8a0644c5d1e6..52b50e35863dd6ca8d5df2361311cfa645076680
@@@ -2448,28 -2476,14 +2483,24 @@@ static void patchZone(UeberBackend& bac
  
      // edit SOA (if needed)
      if (!zone_disabled && !soa_edit_api_kind.empty() && !soa_edit_done) {
-       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))) {
-           throw ApiException("Hosting backend does not support editing records.");
-         }
-       }
-       // return old and new serials in headers
+       // return old serial in headers, before changing it
        resp->headers["X-PDNS-Old-Serial"] = std::to_string(soaData.serial);
-       fillSOAData(resourceRecord.content, soaData);
+       updateZoneSerial(domainInfo, soaData, soa_edit_api_kind, soa_edit_kind);
+       // return new serial in headers
        resp->headers["X-PDNS-New-Serial"] = std::to_string(soaData.serial);
      }
 +
 +    // Rectify
 +    DNSSECKeeper dnssecKeeper(&backend);
 +    if (!zone_disabled && !dnssecKeeper.isPresigned(zonename) && isZoneApiRectifyEnabled(domainInfo)) {
 +      string info;
 +      string error_msg;
 +      if (!dnssecKeeper.rectifyZone(zonename, error_msg, info, false)) {
 +        throw ApiException("Failed to rectify '" + zonename.toStringFull() + "' " + error_msg);
 +      }
 +    }
    }
    catch (...) {
      domainInfo.backend->abortTransaction();