summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--aconf/modules/dns-zone.lua81
1 files changed, 81 insertions, 0 deletions
diff --git a/aconf/modules/dns-zone.lua b/aconf/modules/dns-zone.lua
new file mode 100644
index 0000000..f01c395
--- /dev/null
+++ b/aconf/modules/dns-zone.lua
@@ -0,0 +1,81 @@
+--[[
+Copyright (c) 2012-2015 Kaarle Ritvanen
+See LICENSE file for license details
+--]]
+
+local M = require('aconf.model')
+
+
+local RecordString = M.object.class(M.String)
+
+function RecordString:decode(context, value)
+ return (value:match('^"(.*)"$') or value):gsub('%\\(.)', '%1')
+end
+
+function RecordString:encode(context, value)
+ return value:match('^[A-Za-z%d%.%-:]*$') or '"'..value:gsub(
+ '(["\\])', '\\%1'
+ )..'"'
+end
+
+
+local Record = M.new()
+Record.class = RecordString{
+ required=true, default='IN', visible=false, editable=true
+}
+Record.ttl = RecordString{ui_name='Time-to-live'}
+Record.type = M.String{
+ required=true,
+ choice={'A', 'AAAA', 'CNAME', 'MX', 'NAPTR', 'NS', 'PTR', 'SOA', 'SRV'}
+}
+Record.rdata = RecordString{
+ condition={type={'A', 'AAAA', 'CNAME', 'NS', 'PTR'}},
+ required=true,
+ ui_name='Resource data'
+}
+Record.priority = M.Integer{condition={type={'MX', 'SRV'}}, required=true}
+
+Record.exchange = RecordString{condition={type='MX'}, required=true}
+
+Record.order = M.Integer{condition={type='NAPTR'}, required=true}
+Record.preference = M.Integer{condition={type='NAPTR'}, required=true}
+Record.flags = RecordString{condition={type='NAPTR'}, required=true}
+Record.service = RecordString{condition={type='NAPTR'}, required=true}
+Record.regexp = RecordString{
+ condition={type='NAPTR'}, required=true, ui_name='Regular expression'
+}
+Record.replacement = RecordString{condition={type='NAPTR'}, required=true}
+
+Record.mname = RecordString{
+ condition={type='SOA'}, required=true, ui_name='Primary server'
+}
+Record.rname = RecordString{
+ condition={type='SOA'}, required=true, ui_name='Responsible'
+}
+Record.serial = RecordString{condition={type='SOA'}, required=true}
+Record.refresh = RecordString{condition={type='SOA'}, required=true}
+Record.retry = RecordString{condition={type='SOA'}, required=true}
+Record.expiry = RecordString{condition={type='SOA'}, required=true}
+Record.minimum = RecordString{condition={type='SOA'}, required=true}
+
+Record.weight = M.Integer{condition={type='SRV'}, required=true}
+Record.port = M.net.Port{condition={type='SRV'}, required=true}
+Record.target = RecordString{condition={type='SRV'}, required=true}
+
+
+M.register(
+ 'dns-zone',
+ M.Collection{
+ type=M.Collection{
+ type=M.List{
+ type=M.Model{model=Record, addr='#/*/*'}, ui_member='Record'
+ },
+ ui_member=''
+ },
+ addr='/augeas/var/bind/pri',
+ ui_name='DNS zones',
+ ui_member=''
+ }
+)
+
+M.permission.defaults('/dns-zone')