diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2012-03-01 09:01:04 +0000 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2012-03-01 09:01:04 +0000 |
commit | e062156947cbcb17fdaf7fe7bf398a766924f2d3 (patch) | |
tree | 657f43cf0bf04883bc9da276372f6bd7225c940d | |
parent | e97510c3f58017ad28380ca5686a0f44fb6b6c01 (diff) | |
download | awall-e062156947cbcb17fdaf7fe7bf398a766924f2d3.tar.bz2 awall-e062156947cbcb17fdaf7fe7bf398a766924f2d3.tar.xz |
variable expansion
-rw-r--r-- | awall/init.lua | 30 |
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 |