summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2012-03-01 09:01:04 +0000
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2012-03-01 09:01:04 +0000
commite062156947cbcb17fdaf7fe7bf398a766924f2d3 (patch)
tree657f43cf0bf04883bc9da276372f6bd7225c940d
parente97510c3f58017ad28380ca5686a0f44fb6b6c01 (diff)
downloadawall-e062156947cbcb17fdaf7fe7bf398a766924f2d3.tar.bz2
awall-e062156947cbcb17fdaf7fe7bf398a766924f2d3.tar.xz
variable expansion
-rw-r--r--awall/init.lua30
1 files changed, 30 insertions, 0 deletions
diff --git a/awall/init.lua b/awall/init.lua
index 4635ff8..8f3212d 100644
--- a/awall/init.lua
+++ b/awall/init.lua
@@ -55,6 +55,36 @@ function translate()
end
end
+
+ function expandvars(obj)
+ for k, v in pairs(obj) do
+ if type(v) == 'table' then
+ expandvars(v)
+
+ else
+ local visited = {}
+ local val = v
+
+ while type(val) == 'string' and string.sub(val, 1, 1) == '$' do
+ local name = string.sub(val, 2, -1)
+
+ if util.contains(visited, name) then
+ error('Circular variable definition: '..name)
+ end
+ table.insert(visited, name)
+
+ val = config.variable[name]
+ if not val then error('Invalid variable reference: '..name) end
+ end
+
+ obj[k] = val
+ end
+ end
+ end
+
+ expandvars(config)
+
+
function insertrule(trule)
local t = awall.iptables.config[trule.family][trule.table][trule.chain]
if trule.position == 'prepend' then