aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2012-07-13 13:20:16 +0000
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2012-07-13 13:20:16 +0000
commite4df90e614b9ecb9d3dc312c95238dc38b2f775d (patch)
tree226e009de1e920ccdeebe6f79235c0d3de45b3ae
parent044a5efcdf3cc76cba012d9a4984a46c0f29c0ba (diff)
downloadawall-0.2.1.tar.bz2
awall-0.2.1.tar.xz
show generated rules per configuration object in level 4 dumpv0.2.1
ordered rules shown at level 5
-rwxr-xr-xawall-cli55
-rw-r--r--awall/model.lua10
2 files changed, 41 insertions, 24 deletions
diff --git a/awall-cli b/awall-cli
index 16d565c..ec3a7c9 100755
--- a/awall-cli
+++ b/awall-cli
@@ -60,7 +60,7 @@ List optional policies:
Dump variable and zone definitions:
awall dump [level]
- Verbosity level is an integer in range 0-4 and defaults to 0.
+ Verbosity level is an integer in range 0-5 and defaults to 0.
]])
os.exit()
@@ -128,19 +128,27 @@ if util.contains({'disable', 'enable'}, mode) then
end
-config = policyset:load()
+input = policyset:load()
-if mode == 'dump' then
- level = 0 + (arg[opind] or 0)
+if mode == 'dump' then level = 0 + (arg[opind] or 0) end
+
+if mode ~= 'dump' or level > 3 then
+ awall.loadmodules(basedir)
+ config = awall.Config.new(input)
+end
+
+require 'awall.iptables'
+
+if mode == 'dump' then
require 'json'
- expconfig = config:expand()
+ expinput = input:expand()
function capitalize(cls)
return string.upper(string.sub(cls, 1, 1))..string.sub(cls, 2, -1)
end
- for cls, objs in pairs(config.data) do
+ for cls, objs in pairs(input.data) do
if level > 2 or (level == 2 and cls ~= 'service') or util.contains({'variable',
'zone'},
cls) then
@@ -148,15 +156,25 @@ if mode == 'dump' then
items = {}
for k, v in pairs(objs) do
- exp = expconfig[cls][k]
+ exp = expinput[cls][k]
expj = json.encode(exp)
- src = config.source[cls][k]
+ src = input.source[cls][k]
+
if level == 0 then table.insert(items, {k, expj, src})
+
else
- table.insert(items,
- {k, {{capitalize(cls)..' '..k, json.encode(v)},
- {'('..src..')',
- util.compare(exp, v) and '' or '-> '..expj}}})
+ data = {{capitalize(cls)..' '..k, json.encode(v)},
+ {'('..src..')',
+ util.compare(exp, v) and '' or '-> '..expj}}
+
+ if level > 3 then
+ obj = config.objects[cls][k]
+ if type(obj) == 'table' and obj.info then
+ util.extend(data, obj:info())
+ end
+ end
+
+ table.insert(items, {k, data})
end
end
table.sort(items, function(a, b) return a[1] < b[1] end)
@@ -170,18 +188,7 @@ if mode == 'dump' then
end
end
- if level < 4 then os.exit() end
-end
-
-
-require 'awall.iptables'
-awall.loadmodules(basedir)
-
-config = awall.Config.new(config)
-
-
-if mode == 'dump' then
- config:print()
+ if level > 4 then config:print() end
elseif mode == 'translate' then
if verify then config:test() end
diff --git a/awall/model.lua b/awall/model.lua
index 6f08409..2813d8b 100644
--- a/awall/model.lua
+++ b/awall/model.lua
@@ -37,6 +37,16 @@ function ConfigObject:error(msg) error(self.location..': '..msg) end
function ConfigObject:trules() return {} end
+function ConfigObject:info()
+ local res = {}
+ for i, trule in ipairs(self:trules()) do
+ table.insert(res,
+ {' '..trule.family..'/'..trule.table..'/'..trule.chain,
+ trule.opts})
+ end
+ return res
+end
+
Zone = class(ConfigObject)