From: Christian Hofstaedtler Date: Fri, 20 Sep 2013 13:03:29 +0000 (+0200) Subject: expose create zone in JSON webserver X-Git-Tag: rec-3.6.0-rc1~428^2~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a8f16540fb6789fbc767fb62c57410a96068abec;p=pdns expose create zone in JSON webserver --- diff --git a/pdns/ws.cc b/pdns/ws.cc index 86781e6f0..c576fef89 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;