diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2017-11-03 21:02:12 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2017-11-03 21:02:12 +0200 |
commit | 380590e5ce3b2047d5c39f4db440faf82872f2e5 (patch) | |
tree | 653362bd3f6be76d4ebd19247fa572d233e940d1 | |
parent | 70aeb9f1c5261da53f7b1f0408760d62afd47b26 (diff) | |
download | awall-380590e5ce3b2047d5c39f4db440faf82872f2e5.tar.bz2 awall-380590e5ce3b2047d5c39f4db440faf82872f2e5.tar.xz |
host: resolvelist function
-rw-r--r-- | awall/host.lua | 26 | ||||
-rw-r--r-- | awall/model.lua | 14 | ||||
-rw-r--r-- | awall/modules/filter.lua | 2 | ||||
-rw-r--r-- | awall/modules/log.lua | 10 |
4 files changed, 31 insertions, 21 deletions
diff --git a/awall/host.lua b/awall/host.lua index 53b1d58..35178fb 100644 --- a/awall/host.lua +++ b/awall/host.lua @@ -1,13 +1,18 @@ --[[ Host address resolver for Alpine Wall -Copyright (C) 2012-2014 Kaarle Ritvanen +Copyright (C) 2012-2017 Kaarle Ritvanen See LICENSE file for license details ]]-- -local familypatterns = {inet='%d[%.%d/]+', - inet6='[:%x/]+', - domain='[%a-][%.%w-]*'} +local M = {} + +local util = require('awall.util') + + +local familypatterns = { + inet='%d[%.%d/]+', inet6='[:%x/]+', domain='[%a-][%.%w-]*' +} local function getfamily(addr, context) for k, v in pairs(familypatterns) do @@ -18,7 +23,7 @@ end local dnscache = {} -return function(host, context) +function M.resolve(host, context) local family = getfamily(host, context) if family == 'domain' then @@ -52,3 +57,14 @@ return function(host, context) return {{family, host}} end + +function M.resolvelist(list, context) + local res = {} + for _, host in util.listpairs(list) do + util.extend(res, M.resolve(host, context)) + end + return ipairs(res) +end + + +return M diff --git a/awall/model.lua b/awall/model.lua index 8f650ab..003789f 100644 --- a/awall/model.lua +++ b/awall/model.lua @@ -10,7 +10,7 @@ local M = {} local loadclass = require('awall').loadclass M.class = require('awall.class') -local resolve = require('awall.host') +local resolvelist = require('awall.host').resolvelist local builtin = require('awall.iptables').builtin local optfrag = require('awall.optfrag') @@ -125,13 +125,11 @@ function M.Zone:optfrags(dir) local aopts = nil if self.addr then aopts = {} - for i, hostdef in listpairs(self.addr) do - for i, addr in ipairs(resolve(hostdef, self)) do - table.insert( - aopts, - {family=addr[1], [aprop]=addr[2], match='-'..aopt..' '..addr[2]} - ) - end + for _, addr in resolvelist(self.addr) do + table.insert( + aopts, + {family=addr[1], [aprop]=addr[2], match='-'..aopt..' '..addr[2]} + ) end end diff --git a/awall/modules/filter.lua b/awall/modules/filter.lua index 8633a3d..701794e 100644 --- a/awall/modules/filter.lua +++ b/awall/modules/filter.lua @@ -6,7 +6,7 @@ See LICENSE file for license details local loadclass = require('awall').loadclass -local resolve = require('awall.host') +local resolve = require('awall.host').resolve local model = require('awall.model') local class = model.class diff --git a/awall/modules/log.lua b/awall/modules/log.lua index ad1bc54..da42d7b 100644 --- a/awall/modules/log.lua +++ b/awall/modules/log.lua @@ -5,7 +5,7 @@ See LICENSE file for license details ]]-- -local resolve = require('awall.host') +local resolvelist = require('awall.host').resolvelist local model = require('awall.model') local class = model.class @@ -85,12 +85,8 @@ function Log:optfrags() ) end - for _, hostdef in util.listpairs(self.mirror) do - for _, addr in ipairs(resolve(hostdef, self)) do - table.insert( - targets, {family=addr[1], target='TEE --gateway '..addr[2]} - ) - end + for _, addr in resolvelist(self.mirror) do + table.insert(targets, {family=addr[1], target='TEE --gateway '..addr[2]}) end return combinations(ofrags, targets) |