]> granicus.if.org Git - pdns/commitdiff
Add doRectify bool to DNSSECKeeper::rectifyZone()
authorPieter Lexis <pieter.lexis@powerdns.com>
Mon, 16 Oct 2017 10:32:39 +0000 (12:32 +0200)
committerPieter Lexis <pieter.lexis@powerdns.com>
Tue, 17 Oct 2017 14:17:28 +0000 (16:17 +0200)
This is added so the API can wrap an update to a zone's records *and*
DNSSEC info into a single transaction.

pdns/dbdnsseckeeper.cc
pdns/dnsseckeeper.hh
pdns/pdnsutil.cc
pdns/ws-auth.cc

index fe7570e8b29e9d523d5d8d24c03fe23a35ac634b..07e4a977865df5783ac9a3317268836765cd2bf3 100644 (file)
@@ -587,7 +587,13 @@ bool DNSSECKeeper::getTSIGForAccess(const DNSName& zone, const string& master, D
   return false;
 }
 
-bool DNSSECKeeper::rectifyZone(const DNSName& zone, string& error) {
+/* Rectifies the zone
+ *
+ * \param zone The zone to rectify
+ * \param error& A string where error messages are added
+ * \param doTransaction Whether or not to wrap the rectify in a transaction
+ */
+bool DNSSECKeeper::rectifyZone(const DNSName& zone, string& error, bool doTransaction) {
   if (isPresigned(zone)) {
     error =  "Rectify presigned zone '"+zone.toLogString()+"' is not allowed/necessary.";
     return false;
@@ -662,7 +668,8 @@ bool DNSSECKeeper::rectifyZone(const DNSName& zone, string& error) {
     }
   }
 
-  sd.db->startTransaction(zone, -1);
+  if (doTransaction)
+    sd.db->startTransaction(zone, -1);
 
   bool realrr=true;
   bool doent=true;
@@ -766,7 +773,8 @@ bool DNSSECKeeper::rectifyZone(const DNSName& zone, string& error) {
     }
   }
 
-  sd.db->commitTransaction();
+  if (doTransaction)
+    sd.db->commitTransaction();
 
   return true;
 }
index 2cecc5557fab315ef489f3ab9f570c61cf4d93d4..f6e7b678a08c387a278c82c016773d85c12275ab 100644 (file)
@@ -210,7 +210,7 @@ public:
   
   void getFromMeta(const DNSName& zname, const std::string& key, std::string& value);
   void getSoaEdit(const DNSName& zname, std::string& value);
-  bool rectifyZone(const DNSName& zone, std::string& error);
+  bool rectifyZone(const DNSName& zone, std::string& error, bool doTransaction);
 private:
 
 
index d2e6900efddf557504951cf783247217fc1e5342..ed9dc9033d112602ae651ca50f4156854afb7f56 100644 (file)
@@ -138,7 +138,7 @@ void loadMainConfig(const std::string& configdir)
 bool rectifyZone(DNSSECKeeper& dk, const DNSName& zone)
 {
   string error;
-  bool ret = dk.rectifyZone(zone, error);
+  bool ret = dk.rectifyZone(zone, error, true);
   if (!ret) {
     cerr<<error<<endl;
   }
index 02dfbb33862adf0f587bef418e08e1f8da91f6a2..7aa153c493f930ec5c836ddae940147362460d40 100644 (file)
@@ -656,7 +656,7 @@ static void updateDomainSettingsFromDocument(UeberBackend& B, const DomainInfo&
   di.backend->getDomainMetadataOne(zonename, "API-RECTIFY", api_rectify);
   if (shouldRectify && dk.isSecuredZone(zonename) && !dk.isPresigned(zonename) && api_rectify == "1") {
     string error_msg = "";
-    if (!dk.rectifyZone(zonename, error_msg))
+    if (!dk.rectifyZone(zonename, error_msg, true))
       throw ApiException("Failed to rectify '" + zonename.toString() + "' " + error_msg);
   }
 }
@@ -1470,7 +1470,7 @@ static void apiServerZoneRectify(HttpRequest* req, HttpResponse* resp) {
     throw ApiException("Zone '" + zonename.toString() + "' is a slave zone, not rectifying.");
 
   string error_msg = "";
-  if (!dk.rectifyZone(zonename, error_msg))
+  if (!dk.rectifyZone(zonename, error_msg, true))
     throw ApiException("Failed to rectify '" + zonename.toString() + "' " + error_msg);
 
   resp->setSuccessResult("Rectified");
@@ -1696,7 +1696,7 @@ static void patchZone(HttpRequest* req, HttpResponse* resp) {
   di.backend->getDomainMetadataOne(zonename, "API-RECTIFY", api_rectify);
   if (dk.isSecuredZone(zonename) && !dk.isPresigned(zonename) && api_rectify == "1") {
     string error_msg = "";
-    if (!dk.rectifyZone(zonename, error_msg))
+    if (!dk.rectifyZone(zonename, error_msg, false))
       throw ApiException("Failed to rectify '" + zonename.toString() + "' " + error_msg);
   }