# HG changeset patch # User Matthew Wild # Date 1365184252 -3600 # Node ID f0108ec2b0162a3099acee6d914a4775dbb10a50 # Parent d773a51af9b164ff73e1d17a4dc9ef6d6bcacaca mod_firewall/actions: Break out logic into a separate reusable function diff -r d773a51af9b1 -r f0108ec2b016 mod_firewall/actions.lib.lua --- a/mod_firewall/actions.lib.lua Fri Apr 05 18:08:16 2013 +0100 +++ b/mod_firewall/actions.lib.lua Fri Apr 05 18:50:52 2013 +0100 @@ -1,5 +1,13 @@ local action_handlers = {}; + +-- Run code through this to allow strings to contain code. e.g.: LOG=Received: $(stanza:top_tag()) +local function meta(s, extra) + return (s:gsub("$(%b())", [["..%1.."]]) + :gsub("$(%b<>)", [["..stanza:find("%1").."]]) + :gsub("$$(%a+)", extra or {})); +end + -- Takes an XML string and returns a code string that builds that stanza -- using st.stanza() local function compile_xml(data) @@ -152,10 +160,7 @@ function action_handlers.LOG(string) local level = string:match("^%[(%a+)%]") or "info"; string = string:gsub("^%[%a+%] ?", ""); - return (("log(%q, %q)"):format(level, string) - :gsub("$top", [["..stanza:top_tag().."]]) - :gsub("$stanza", [["..stanza.."]]) - :gsub("$(%b())", [["..%1.."]])); + return meta(("log(%q, %q)"):format(level, string)); end function action_handlers.RULEDEP(dep)