summaryrefslogtreecommitdiffstats
path: root/aconf/modules
diff options
context:
space:
mode:
Diffstat (limited to 'aconf/modules')
-rw-r--r--aconf/modules/dnsmasq.lua49
1 files changed, 49 insertions, 0 deletions
diff --git a/aconf/modules/dnsmasq.lua b/aconf/modules/dnsmasq.lua
new file mode 100644
index 0000000..c61a1f5
--- /dev/null
+++ b/aconf/modules/dnsmasq.lua
@@ -0,0 +1,49 @@
+--[[
+Copyright (c) 2012-2014 Kaarle Ritvanen
+See LICENSE file for license details
+--]]
+
+local M = require('aconf.model')
+
+local filter_conf = '/etc/dnsmasq-filter.conf'
+
+local Address = M.new()
+Address.address = M.net.IPAddress{addr='&'}
+Address.domain = M.String
+
+local Filter = M.new()
+Filter.enabled = M.Boolean{
+ compute=function(obj)
+ return M.node.contains(obj:fetch('../conf-file'), filter_conf)
+ end,
+ store=function(obj, value)
+ local files = obj:fetch('../conf-file')
+ if value then M.node.insert(files, filter_conf)
+ else files[filter_conf] = nil end
+ end
+}
+Filter.redirect_address = M.net.IPAddress{
+ compute=function(obj)
+ local addr = obj.address
+ return addr and addr.address
+ end,
+ store=function(obj, value)
+ obj.address = value and {address=value, domain='#'} or nil
+ end
+}
+Filter.address = M.Model{model=Address, visible=false}
+Filter.whitelist = M.Set{
+ type=M.net.DomainName,
+ addr='server/@/#/domain/#',
+ ui_name='Domain whitelist',
+ widget='inline'
+}
+
+local Dnsmasq = M.new()
+Dnsmasq.filter = M.Model{model=Filter, addr='/augeas'..filter_conf}
+Dnsmasq.conf_file = M.Set{
+ type=M.String, addr='/augeas/etc/dnsmasq.conf/conf-file/#', visible=false
+}
+
+M.register('dnsmasq', Dnsmasq)
+M.permission.defaults('/dnsmasq')