From: Marek VavruĊĦa Date: Sun, 21 Jun 2015 10:31:20 +0000 (+0200) Subject: modules/block: common suffix match X-Git-Tag: v1.0.0-beta1~116^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6c37733c31c9abccc917ee0b71d15d099583bff1;p=thirdparty%2Fknot-resolver.git modules/block: common suffix match --- diff --git a/modules/block/block.lua b/modules/block/block.lua index 24167985b..f83d5ca23 100644 --- a/modules/block/block.lua +++ b/modules/block/block.lua @@ -58,6 +58,25 @@ function block.suffix(action, zone_list) end end +-- @function Check for common suffix first, then suffix match (specialized version of suffix match) +function block.suffix_common(action, common_suffix, suffix_list) + return function(pkt, qry) + local qname = qry:qname() + -- Preliminary check + local zone = common_suffix + if qname:sub(-zone:len()) ~= zone then + return nil + end + -- String match + for _, zone in pairs(suffix_list) do + if qname:sub(-zone:len()) == zone then + return action, zone + end + end + return nil + end +end + -- @function Block QNAME pattern function block.pattern(action, pattern) return function(pkt, qry) @@ -111,7 +130,7 @@ block.layer = { } -- @var Default rules -block.rules = { block.suffix(block.DENY, block.private_zones) } +block.rules = { block.suffix_common(block.DENY, '.arpa.', block.private_zones) } -- @function Add rule to block list function block.add(block, rule)