Created
May 5, 2010 19:52
-
-
Save toke/391332 to your computer and use it in GitHub Desktop.
CouchDB Bind zone file generation as an example (CouchDB show function)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function(doc, req) { | |
// bind zone file generation as an example (CouchDB show function) | |
// see http://blog.fupps.com/2010/05/03/dns-backed-by-couchdb-redux/ | |
// reused some code by the original author Jan-Piet Mens | |
// Warning very raw code below. It may eat your pants. | |
var soa_rr = function (mname, rname, serial, refresh, retry, expire, minimum){ | |
return ("@ IN SOA " + mname + ". " + rname + ". ("+ serial+" "+ refresh + " "+ retry + " "+ expire +" "+ minimum +")\n\n"); | |
}; | |
var zone = ""; | |
var zonettl = doc.default_ttl ? doc.default_ttl : 86400; | |
var soa = doc.soa; | |
var mname = (soa.mname) ? soa.mname : 'dns.' + doc.zone; | |
var rname = (soa.rname) ? soa.rname : 'hostmaster.' + doc.zone; | |
var serial = (soa.serial) ? soa.serial : doc['_rev'].replace(/-.*/, ""); | |
var refresh = (soa.refresh) ? soa.refresh : 86400; | |
var retry = (soa.retry) ? soa.retry : 7200; | |
var expire = (soa.expire) ? soa.expire : 3600000; | |
var minimum = (soa.minimum) ? soa.minimum : 172800; | |
zone += "$TTL " + zonettl + "\n"; | |
zone += soa_rr(mname, rname, serial, refresh, retry, expire, minimum); | |
if (doc.ns && doc.ns.length > 0) { | |
doc.ns.forEach(function(addr) { | |
zone += "\tIN NS " + addr + ".\n"; | |
}); | |
} | |
zone += "\n"; | |
if (doc.rr && doc.rr.length > 0) { | |
for (var i = 0; i < doc.rr.length; i++) { | |
var rr = doc.rr[i]; | |
var rr_type = rr.type.toUpperCase(); | |
var ttl = (rr.ttl) ? rr.ttl : zonettl; | |
var fqdn = (rr.name) ? rr.name + '.' : ''; | |
if (rr_type === "MX" && rr.priority){ | |
var rr_data = rr.priority + " " + rr.data; | |
} else { | |
var rr_data = rr.data; | |
if (rr_type === "TXT"){ | |
// Quote here | |
rr_data = "\""+rr_data+"\""; | |
} | |
} | |
fqdn += doc.zone; | |
zone += fqdn +".\t"+ ttl +" IN " + rr_type + " " + rr_data + "\n"; | |
} | |
} | |
return (zone); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"_id": "toke.de", | |
"_rev": "3-7afba84bc6321db26925987ff15f1111", | |
"default_ttl": 1801, | |
"ns": [ | |
"a.ns.kerpe.net", | |
"b.ns.kerpe.net" | |
], | |
"rr": [ | |
{ | |
"data": [ | |
"20 a.mx.kerpe.net" | |
], | |
"type": "mx" | |
}, | |
{ | |
"data": [ | |
"v=spf1 ptr mx a:a.mx.kerpe.net a:mail.kerpe.net -all" | |
], | |
"type": "txt", | |
"name": "www", | |
"ttl": 60 | |
}, | |
{ | |
"data": [ | |
"a.web.toke.de." | |
], | |
"type": "cname", | |
"name": "www", | |
"ttl": 3600 | |
}, | |
{ | |
"data": [ | |
"188.40.41.113" | |
], | |
"type": "a", | |
"name": "a.web" | |
}, | |
{ | |
"data": [ | |
"2001:6f8:1039::3" | |
], | |
"type": "aaaa", | |
"name": "a.web" | |
} | |
], | |
"soa": { | |
"retry": 1800, | |
"mname": "toke.de", | |
"minimum": 86400, | |
"refresh": 10800, | |
"xserial": 69, | |
"expire": 604800 | |
}, | |
"type": "zone", | |
"zone": "toke.de" | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Example output of the above function and document https://127.0.0.1:5984/dns/_design/dns/_show/bindzone/toke.de | |
$TTL 1801 | |
@ IN SOA toke.de. hostmaster.toke.de. (3 10800 1800 604800 86400) | |
IN NS a.ns.kerpe.net. | |
IN NS b.ns.kerpe.net. | |
toke.de. 1801 IN MX 20 a.mx.kerpe.net | |
www.toke.de. 60 IN TXT "v=spf1 ptr mx a:a.mx.kerpe.net a:mail.kerpe.net -all" | |
www.toke.de. 3600 IN CNAME a.web.toke.de. | |
a.web.toke.de. 1801 IN A 188.40.41.113 | |
a.web.toke.de. 1801 IN AAAA 2001:6f8:1039::3 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment