]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Auth API: add zone lookup by /zones?zone=example.org.
authorChris Hofstaedtler <chris.hofstaedtler@deduktiva.com>
Thu, 24 May 2018 08:51:17 +0000 (10:51 +0200)
committerChris Hofstaedtler <chris.hofstaedtler@deduktiva.com>
Thu, 24 May 2018 08:59:44 +0000 (10:59 +0200)
pdns/ws-auth.cc
regression-tests.api/test_Zones.py

index 63214bddb7bc80dd78ffd12991d2e407ec4f0f96..190ffeccd52615d4f3645cfe6e411ce4cc2a1a15 100644 (file)
@@ -1390,7 +1390,20 @@ static void apiServerZones(HttpRequest* req, HttpResponse* resp) {
     throw HttpMethodNotAllowedException();
 
   vector<DomainInfo> domains;
-  B.getAllDomains(&domains, true); // incl. disabled
+
+  auto zone_it = req->getvars.find("zone");
+  if (zone_it != req->getvars.end()) {
+    string zone = zone_it->second;
+    apiCheckNameAllowedCharacters(zone);
+    DNSName zonename = apiNameToDNSName(zone);
+    zonename.makeUsLowerCase();
+    DomainInfo di;
+    if (B.getDomainInfo(zonename, di)) {
+      domains.push_back(di);
+    }
+  } else {
+    B.getAllDomains(&domains, true); // incl. disabled
+  }
 
   Json::array doc;
   for(const DomainInfo& di : domains) {
index a4a3ffcadb0c2769016d0685faab2428dfc5864c..60c5cddad80c23f5fd5f6f9d6b3b67b2d552ab64 100644 (file)
@@ -603,6 +603,14 @@ class AuthZones(ApiTestCase, AuthZonesHelperMixin):
         self.assertEqual(data['serial'], 0)
         self.assertEqual(data['rrsets'], [])
 
+    def test_find_zone_by_name(self):
+        name = 'foo/' + unique_zone_name()
+        name, payload, data = self.create_zone(name=name)
+        r = self.session.get(self.url("/api/v1/servers/localhost/zones?zone=" + name))
+        data = r.json()
+        print(data)
+        self.assertEquals(data[0]['name'], name)
+
     def test_delete_slave_zone(self):
         name, payload, data = self.create_zone(kind='Slave', nameservers=None, masters=['127.0.0.2'])
         r = self.session.delete(self.url("/api/v1/servers/localhost/zones/" + data['id']))