]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
API: Allow rectifying Slave zones
authorChris Hofstaedtler <chris.hofstaedtler@deduktiva.com>
Tue, 2 Jun 2020 08:57:42 +0000 (10:57 +0200)
committerChris Hofstaedtler <chris.hofstaedtler@deduktiva.com>
Tue, 2 Jun 2020 08:57:48 +0000 (10:57 +0200)
Fixes #9066.

pdns/ws-auth.cc
regression-tests.api/test_Zones.py

index de5fa008405e1a019be87da67208bb0fec535081..0f6eed87f4a8195a17234a5ef45cea561dbd6b4e 100644 (file)
@@ -1863,9 +1863,6 @@ static void apiServerZoneRectify(HttpRequest* req, HttpResponse* resp) {
   if (!dk.isSecuredZone(zonename))
     throw ApiException("Zone '" + zonename.toString() + "' is not DNSSEC signed, not rectifying.");
 
-  if (di.kind == DomainInfo::Slave)
-    throw ApiException("Zone '" + zonename.toString() + "' is a slave zone, not rectifying.");
-
   string error_msg = "";
   string info;
   if (!dk.rectifyZone(zonename, error_msg, info, true))
index ca372f124a5c2026d613988e9d84ae2264628930..f95ede6e7b1ddb6b382234f34b19d4cb9a3edf83 100644 (file)
@@ -1916,6 +1916,32 @@ $ORIGIN %NAME%
         dbrecs = get_db_records(name, 'AAAA')
         self.assertIsNone(dbrecs[0]['ordername'])
 
+    def test_explicit_rectify_success(self):
+        name, _, data = self.create_zone = self.create_zone(api_rectify=False, dnssec=True, nsec3param='1 0 1 ab')
+        dbrecs = get_db_records(name, 'SOA')
+        self.assertIsNone(dbrecs[0]['ordername'])
+        r = self.session.put(self.url("/api/v1/servers/localhost/zones/" + data['id'] + "/rectify"))
+        self.assertEquals(r.status_code, 200)
+        dbrecs = get_db_records(name, 'SOA')
+        self.assertIsNotNone(dbrecs[0]['ordername'])
+
+    def test_explicit_rectify_no_dnssec(self):
+        _, _, data = self.create_zone = self.create_zone(api_rectify=False, dnssec=False)
+        r = self.session.put(self.url("/api/v1/servers/localhost/zones/" + data['id'] + "/rectify"))
+        self.assertEquals(r.status_code, 422)
+
+    def test_explicit_rectify_slave(self):
+        # Some users want to move a zone to kind=Slave and then rectify, without a re-transfer.
+        name, _, data = self.create_zone = self.create_zone(api_rectify=False, dnssec=True, nsec3param='1 0 1 ab')
+        r = self.session.put(self.url("/api/v1/servers/localhost/zones/" + data['id']),
+            data=json.dumps({'kind': 'Slave'}),
+            headers={'content-type': 'application/json'})
+        self.assertEquals(r.status_code, 204)
+        r = self.session.put(self.url("/api/v1/servers/localhost/zones/" + data['id'] + "/rectify"))
+        self.assertEquals(r.status_code, 200)
+        dbrecs = get_db_records(name, 'SOA')
+        self.assertIsNotNone(dbrecs[0]['ordername'])
+
     def test_cname_at_ent_place(self):
         name, payload, zone = self.create_zone(dnssec=True, api_rectify=True)
         rrset = {