]> granicus.if.org Git - pdns/commitdiff
API: read and expose domain account field
authorChristian Hofstaedtler <christian@hofstaedtler.name>
Sat, 7 Feb 2015 14:01:26 +0000 (15:01 +0100)
committerChristian Hofstaedtler <christian@hofstaedtler.name>
Sat, 7 Feb 2015 14:03:44 +0000 (15:03 +0100)
docs/markdown/httpapi/api_spec.md
modules/gmysqlbackend/gmysqlbackend.cc
modules/gpgsqlbackend/gpgsqlbackend.cc
modules/gsqlite3backend/gsqlite3backend.cc
pdns/backends/gsql/gsqlbackend.cc
pdns/dnsbackend.hh
pdns/ws-auth.cc
regression-tests.api/test_Zones.py

index be462982b84c33437d1f5da35be9fae5affe69a1..c33bcb82e5f1fe7e69e3248b1f52557d6e133348 100644 (file)
@@ -297,6 +297,7 @@ zone_collection
       "presigned": <bool>,
       "soa_edit": "<string>",
       "soa_edit_api": "<string>",
+      "account": "<string>",
       "nameservers": ["<string>", ...],
       "servers": ["<string>", ...],
       "recursion_desired": <bool>,
@@ -338,6 +339,9 @@ zone_collection
   the SOA-EDIT-API rules. (Which are the same as the SOA-EDIT rules.)
   **Note**: Authoritative only.
 
+* `account` MAY be set. It's value is defined by local policy.
+  **Note**: Authoritative only.
+
 * `notified_serial`, `serial` MUST NOT be sent in client bodies.
   **Note**: Authoritative only.
 
index 316e060353867063f165df7144aa9b90b66f88a1..6320c31705ed04bb991c6772bb33f3a1a4a2d52d 100644 (file)
@@ -66,7 +66,7 @@ public:
 
     declare(suffix,"master-zone-query","Data", "select master from domains where name=? and type='SLAVE'");
 
-    declare(suffix,"info-zone-query","","select id,name,master,last_check,notified_serial,type from domains where name=?");
+    declare(suffix,"info-zone-query","","select id,name,master,last_check,notified_serial,type,account from domains where name=?");
 
     declare(suffix,"info-all-slaves-query","","select id,name,master,last_check,type from domains where type='SLAVE'");
     declare(suffix,"supermaster-query","", "select account from supermasters where ip=? and nameserver=?");
@@ -117,7 +117,7 @@ public:
     declare(suffix,"delete-tsig-key-query","", "delete from tsigkeys where name=?");
     declare(suffix,"get-tsig-keys-query","", "select name,algorithm, secret from tsigkeys");
 
-    declare(suffix, "get-all-domains-query", "Retrieve all domains", "select domains.id, domains.name, records.content, domains.type, domains.master, domains.notified_serial, domains.last_check from domains LEFT JOIN records ON records.domain_id=domains.id AND records.type='SOA' AND records.name=domains.name WHERE records.disabled=0 OR ?");
+    declare(suffix, "get-all-domains-query", "Retrieve all domains", "select domains.id, domains.name, records.content, domains.type, domains.master, domains.notified_serial, domains.last_check, domains.account from domains LEFT JOIN records ON records.domain_id=domains.id AND records.type='SOA' AND records.name=domains.name WHERE records.disabled=0 OR ?");
 
     declare(suffix, "list-comments-query", "", "SELECT domain_id,name,type,modified_at,account,comment FROM comments WHERE domain_id=?");
     declare(suffix, "insert-comment-query", "", "INSERT INTO comments (domain_id, name, type, modified_at, account, comment) VALUES (?, ?, ?, ?, ?, ?)");
index cf3d8c8c4a6ba0b4645ec3d6d82d5c8f278bca90..25d65e8d30f84bfbc5ba75f40cfb79f4d0ec8d89 100644 (file)
@@ -60,7 +60,7 @@ public:
 
     declare(suffix,"master-zone-query","Data", "select master from domains where name=$1 and type='SLAVE'");
 
-    declare(suffix,"info-zone-query","","select id,name,master,last_check,notified_serial,type from domains where name=$1");
+    declare(suffix,"info-zone-query","","select id,name,master,last_check,notified_serial,type,account from domains where name=$1");
 
     declare(suffix,"info-all-slaves-query","","select id,name,master,last_check,type from domains where type='SLAVE'");
     declare(suffix,"supermaster-query","", "select account from supermasters where ip=$1 and nameserver=$2");
@@ -111,7 +111,7 @@ public:
     declare(suffix,"delete-tsig-key-query","", "delete from tsigkeys where name=$1");
     declare(suffix,"get-tsig-keys-query","", "select name,algorithm, secret from tsigkeys");
 
-    declare(suffix, "get-all-domains-query", "Retrieve all domains", "select domains.id, domains.name, records.content, domains.type, domains.master, domains.notified_serial, domains.last_check from domains LEFT JOIN records ON records.domain_id=domains.id AND records.type='SOA' AND records.name=domains.name WHERE records.disabled=false OR $1");
+    declare(suffix, "get-all-domains-query", "Retrieve all domains", "select domains.id, domains.name, records.content, domains.type, domains.master, domains.notified_serial, domains.last_check, domains.account from domains LEFT JOIN records ON records.domain_id=domains.id AND records.type='SOA' AND records.name=domains.name WHERE records.disabled=false OR $1");
 
     declare(suffix, "list-comments-query", "", "SELECT domain_id,name,type,modified_at,account,comment FROM comments WHERE domain_id=$1");
     declare(suffix, "insert-comment-query", "", "INSERT INTO comments (domain_id, name, type, modified_at, account, comment) VALUES ($1, $2, $3, $4, $5, $6)");
index 33aab48314ea06bb84c3f43809e5093b1cae4c2b..a8bbf231c948cdced42a640ae0b8de2545767e83 100644 (file)
@@ -77,7 +77,7 @@ public:
     
     declare(suffix, "master-zone-query", "Data", "select master from domains where name=:domain and type='SLAVE'");
 
-    declare(suffix, "info-zone-query", "","select id,name,master,last_check,notified_serial,type from domains where name=:domain");
+    declare(suffix, "info-zone-query", "","select id,name,master,last_check,notified_serial,type,account from domains where name=:domain");
 
     declare(suffix, "info-all-slaves-query", "","select id,name,master,last_check,type from domains where type='SLAVE'");
     declare(suffix, "supermaster-query", "", "select account from supermasters where ip=:ip and nameserver=:nameserver");
@@ -128,7 +128,7 @@ public:
     declare(suffix, "delete-tsig-key-query","", "delete from tsigkeys where name=:key_name");
     declare(suffix, "get-tsig-keys-query","", "select name,algorithm, secret from tsigkeys");
 
-    declare(suffix, "get-all-domains-query", "Retrieve all domains", "select domains.id, domains.name, records.content, domains.type, domains.master, domains.notified_serial, domains.last_check from domains LEFT JOIN records ON records.domain_id=domains.id AND records.type='SOA' AND records.name=domains.name WHERE records.disabled=0 OR :include_disabled");
+    declare(suffix, "get-all-domains-query", "Retrieve all domains", "select domains.id, domains.name, records.content, domains.type, domains.master, domains.notified_serial, domains.last_check, domains.account from domains LEFT JOIN records ON records.domain_id=domains.id AND records.type='SOA' AND records.name=domains.name WHERE records.disabled=0 OR :include_disabled");
 
     declare(suffix, "list-comments-query", "", "SELECT domain_id,name,type,modified_at,account,comment FROM comments WHERE domain_id=:domain_id");
     declare(suffix, "insert-comment-query", "", "INSERT INTO comments (domain_id, name, type, modified_at, account, comment) VALUES (:domain_id, :qname, :qtype, :modified_at, :account, :content)");
index 5c79f4b0e781f152c27d1537686f74f697a7f0f6..c45aa2ac4bdcf350f2c28806f184b1094f66ba5b 100644 (file)
@@ -273,7 +273,7 @@ bool GSQLBackend::setKind(const string &domain, const DomainInfo::DomainKind kin
 bool GSQLBackend::getDomainInfo(const string &domain, DomainInfo &di)
 {
   /* fill DomainInfo from database info:
-     id,name,master IP(s),last_check,notified_serial,type */
+     id,name,master IP(s),last_check,notified_serial,type,account */
   try {
     d_InfoOfDomainsZoneQuery_stmt->
       bind("domain", toLower(domain))->
@@ -295,6 +295,7 @@ bool GSQLBackend::getDomainInfo(const string &domain, DomainInfo &di)
   di.last_check=atol(d_result[0][3].c_str());
   di.notified_serial = atol(d_result[0][4].c_str());
   string type=d_result[0][5];
+  di.account=d_result[0][6];
   di.backend=this;
 
   di.serial = 0;
@@ -1153,15 +1154,16 @@ void GSQLBackend::getAllDomains(vector<DomainInfo> *domains, bool include_disabl
       if (!row[4].empty()) {
         stringtok(di.masters, row[4], " ,\t");
       }
-      di.last_check=atol(row[6].c_str());
-  
+
       SOAData sd;
       fillSOAData(row[2], sd);
       di.serial = sd.serial;
       if (!row[5].empty()) {
         di.notified_serial = atol(row[5].c_str());
       }
-      
+      di.last_check = atol(row[6].c_str());
+      di.account = row[7];
+
       if (pdns_iequals(row[3], "MASTER"))
         di.kind = DomainInfo::Master;
       else if (pdns_iequals(row[3], "SLAVE"))
index 794e38ac241e437c62d58b4f14e51d619c685e08..c07a27b05f0a40aa0a728f1d449d2d2b631b3f33 100644 (file)
@@ -51,6 +51,7 @@ struct DomainInfo
   uint32_t notified_serial;
   uint32_t serial;
   time_t last_check;
+  string account;
   enum DomainKind { Master, Slave, Native } kind;
   DNSBackend *backend;
   
index baa35d020ca530c88ac238121858c7beb198acf0..828542201d76d6eef91f79bd5e60e41cc463bc53 100644 (file)
@@ -307,6 +307,7 @@ static void fillZone(const string& zonename, HttpResponse* resp) {
   doc.AddMember("type", "Zone", doc.GetAllocator());
   doc.AddMember("kind", di.getKindString(), doc.GetAllocator());
   doc.AddMember("dnssec", dk.isSecuredZone(di.zone), doc.GetAllocator());
+  doc.AddMember("account", di.account.c_str(), doc.GetAllocator());
   string soa_edit_api;
   di.backend->getDomainMetadataOne(zonename, "SOA-EDIT-API", soa_edit_api);
   doc.AddMember("soa_edit_api", soa_edit_api.c_str(), doc.GetAllocator());
index 3e208729727310e4e2000d831a2bedd04773667f..3daf9ddb314192ddbf0e580f8822ce41cfa5252e 100644 (file)
@@ -49,7 +49,7 @@ class AuthZones(ApiTestCase):
 
     def test_create_zone(self):
         payload, data = self.create_zone(serial=22)
-        for k in ('id', 'url', 'name', 'masters', 'kind', 'last_check', 'notified_serial', 'serial', 'soa_edit_api', 'soa_edit'):
+        for k in ('id', 'url', 'name', 'masters', 'kind', 'last_check', 'notified_serial', 'serial', 'soa_edit_api', 'soa_edit', 'account'):
             self.assertIn(k, data)
             if k in payload:
                 self.assertEquals(data[k], payload[k])