// 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();