From: Christian Hofstaedtler Date: Sat, 5 Oct 2013 13:02:36 +0000 (+0200) Subject: ws: move create domain into it's own function X-Git-Tag: rec-3.6.0-rc1~416^2~7 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=543843b31a4b33f3fcbe1cd274331d8a9edcc5f1;p=pdns ws: move create domain into it's own function --- diff --git a/pdns/ws.cc b/pdns/ws.cc index f27719170..80c2bc0d8 100644 --- a/pdns/ws.cc +++ b/pdns/ws.cc @@ -333,6 +333,49 @@ static string getZone(const string& zonename) { return makeStringFromDocument(doc); } +static string createZone(const string& zonename, varmap_t& varmap) { + 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"]); + + // create SOA record so zone "really" exists + 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); +} + static string jsonDispatch(const string& method, const string& post, varmap_t& varmap, const string& command) { if(command=="get") { if(varmap.empty()) { @@ -526,45 +569,7 @@ static string jsonDispatch(const string& method, const string& post, varmap_t& v 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); + return createZone(zonename, varmap); } else if (method == "DELETE") { // delete UeberBackend B;