From a8f16540fb6789fbc767fb62c57410a96068abec Mon Sep 17 00:00:00 2001 From: Christian Hofstaedtler Date: Fri, 20 Sep 2013 15:03:29 +0200 Subject: [PATCH] expose create zone in JSON webserver --- pdns/ws.cc | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/pdns/ws.cc b/pdns/ws.cc index 86781e6f0a..c576fef895 100644 --- a/pdns/ws.cc +++ b/pdns/ws.cc @@ -503,6 +503,47 @@ static string json_dispatch(const string& method, const string& post, varmap_t& if(method == "GET") { // get current zone + return getZone(zonename); + } else if (method == "POST") { + // create + UeberBackend B; + SOAData sd; + DomainInfo di; + sd.db = (DNSBackend*)-1; + if(B.getSOA(zonename, sd) && sd.db && B.getDomainInfo(zonename, di)) { + map err; + err["error"] = "Domain '"+zonename+"' already exists"; + return returnJSONObject(err); + } + + if (!B.createDomain(zonename, &sd.db)) { + map err; + err["error"] = "Creating domain '"+zonename+"' failed"; + return returnJSONObject(err); + } + + if(!B.getDomainInfo(zonename, di) || !di.backend) { + map err; + err["error"] = "Creating domain '"+zonename+"' failed: lookup of domain_id failed"; + return returnJSONObject(err); + } + + di.backend->setKind(zonename, DomainInfo::stringToKind(varmap["kind"])); + di.backend->setMaster(zonename, varmap["master"]); + + DNSResourceRecord soa; + soa.qname = zonename; + soa.content = "1"; + soa.qtype = "SOA"; + soa.domain_id = di.id; + soa.auth = 0; + soa.ttl = ::arg().asNum( "default-ttl" );; + soa.priority = 0; + + sd.db->startTransaction(zonename, di.id); + sd.db->feedRecord(soa); + sd.db->commitTransaction(); + return getZone(zonename); } else { map err; -- 2.47.2