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<string, string> err;
+ err["error"] = "Domain '"+zonename+"' already exists";
+ return returnJSONObject(err);
+ }
+
+ if (!B.createDomain(zonename, &sd.db)) {
+ map<string, string> err;
+ err["error"] = "Creating domain '"+zonename+"' failed";
+ return returnJSONObject(err);
+ }
+
+ if(!B.getDomainInfo(zonename, di) || !di.backend) {
+ map<string, string> 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()) {
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<string, string> err;
- err["error"] = "Domain '"+zonename+"' already exists";
- return returnJSONObject(err);
- }
-
- if (!B.createDomain(zonename, &sd.db)) {
- map<string, string> err;
- err["error"] = "Creating domain '"+zonename+"' failed";
- return returnJSONObject(err);
- }
-
- if(!B.getDomainInfo(zonename, di) || !di.backend) {
- map<string, string> 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;