Hostname-based rules/dnscache are broken
When trying to use hostnames in rule definitions, awall crashes with the following error:
/usr/share/lua/5.3/awall/host.lua:36: attempt to index a nil value (field 'PATTERNS')
stack traceback:
/usr/share/lua/5.3/awall/uerror.lua:25: in metamethod '__index'
/usr/share/lua/5.3/awall/host.lua:36: in function 'awall.host.resolve'
/usr/share/lua/5.3/awall/host.lua:74: in function 'awall.host.resolveunique'
/usr/share/lua/5.3/awall/modules/filter.lua:112: in function </usr/share/lua/5.3/awall/modules/filter.lua:103>
(...tail calls...)
/usr/share/lua/5.3/awall/modules/filter.lua:160: in function </usr/share/lua/5.3/awall/modules/filter.lua:159>
(...tail calls...)
/usr/share/lua/5.3/awall/modules/filter.lua:226: in method 'init'
/usr/share/lua/5.3/awall/class.lua:31: in field 'morph'
/usr/share/lua/5.3/awall/init.lua:129: in method 'init'
/usr/share/lua/5.3/awall/class.lua:31: in function </usr/share/lua/5.3/awall/class.lua:29>
(...tail calls...)
/usr/sbin/awall:235: in upvalue 'f'
/usr/share/lua/5.3/awall/uerror.lua:20: in function </usr/share/lua/5.3/awall/uerror.lua:20>
[C]: in function 'xpcall'
/usr/share/lua/5.3/awall/uerror.lua:19: in function 'awall.uerror.call'
/usr/sbin/awall:163: in main chunk
[C]: in ?
This happens because the family
referenced on line 36 in hosts.lua
is shadowed on line 26 and line 30.
An easy fix would be something like
diff --git a/awall/host.lua b/awall/host.lua
index 9ca9d0a..581a0d6 100644
--- a/awall/host.lua
+++ b/awall/host.lua
@@ -9,6 +9,7 @@ local M = {}
local family = require('awall.family')
local identify = family.identify
+local PATTERNS = family.PATTERNS
local util = require('awall.util')
local listpairs = util.listpairs
@@ -33,7 +34,7 @@ function M.resolve(list, context, allow)
if answer then
if rec == '' then break end
local addr = rec:match(
- '^'..family.PATTERNS.domain..'%s+%d+%s+IN%s+'..rtype..
+ '^'..PATTERNS.domain..'%s+%d+%s+IN%s+'..rtype..
'%s+(.+)'
)
if addr then
But IMHO it probably makes more sense to rethink the naming of those variables altogether.