From 73ce63efea989cf8e00a4424f080e83d9277dfdf Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Mon, 9 Mar 2015 17:37:37 +0200 Subject: module for DNS zone files --- aconf/modules/dns-zone.lua | 81 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 aconf/modules/dns-zone.lua (limited to 'aconf') 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') -- cgit v1.2.3