From 7bec78a5a536b1ab8d346ac50060606bec9d2053 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Sun, 5 Nov 2017 11:38:18 -0300 Subject: [PATCH] Adds support for transformations inside Lua engine --- CHANGES | 2 + .../match-getvar-multi-transformations.lua | 21 +++++ .../data/match-getvar-transformation.lua | 11 +-- .../test-cases/data/match-getvar-withTnfs.lua | 7 ++ .../regression/operator-inpectFile.json | 80 ++++++++++++++++++- 5 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 test/test-cases/data/match-getvar-multi-transformations.lua create mode 100644 test/test-cases/data/match-getvar-withTnfs.lua diff --git a/CHANGES b/CHANGES index df74dbe8..a762c6fd 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,8 @@ v3.0.????? - ? --------------------------- + - Adds support for transformations inside Lua engine + [Issue #994 - @zimmerle] - Adds initial support for Lua engine. [Issue #994 - @zimmerle] - Adds support for @inspectFile operator. diff --git a/test/test-cases/data/match-getvar-multi-transformations.lua b/test/test-cases/data/match-getvar-multi-transformations.lua new file mode 100644 index 00000000..46063912 --- /dev/null +++ b/test/test-cases/data/match-getvar-multi-transformations.lua @@ -0,0 +1,21 @@ +function main() + ret = nil + m.log(9, "Lets rock."); + + var = m.getvar("tx.test" , { "lowercase", "uppercase" }); + if var == nil then + m.log(9, "Don't know what to say..."); + return ret; + end + + if var == "FELIPE" then + m.log(9, "Whee. Working like a charm. That is what we have: " .. var); + elseif var == "felipe" then + m.log(9, "Oh boy. Got: " .. var); + ret ="ok"; + else + m.log(9, "Really?"); + end + + return "whee" +end diff --git a/test/test-cases/data/match-getvar-transformation.lua b/test/test-cases/data/match-getvar-transformation.lua index 202987af..be83113a 100644 --- a/test/test-cases/data/match-getvar-transformation.lua +++ b/test/test-cases/data/match-getvar-transformation.lua @@ -1,20 +1,21 @@ function main() ret = nil + m.log(9, "Lets rock."); - var = m.getvar("tx.test"); + var = m.getvar("tx.test" , "lowercase"); if var == nil then m.log(9, "Don't know what to say..."); - return ret + return ret; end - if var == "FELIPE" + if var == "FELIPE" then m.log(9, "Ops."); - elseif var == "felipe" + elseif var == "felipe" then m.log(9, "Just fine."); ret ="ok"; else m.log(9, "Really?"); end - return ret + return "whee" end diff --git a/test/test-cases/data/match-getvar-withTnfs.lua b/test/test-cases/data/match-getvar-withTnfs.lua new file mode 100644 index 00000000..9a229ce0 --- /dev/null +++ b/test/test-cases/data/match-getvar-withTnfs.lua @@ -0,0 +1,7 @@ +function main() + ret = nil + + var = m.getvar("tx.test", "lowercase"); + + return ret +end diff --git a/test/test-cases/regression/operator-inpectFile.json b/test/test-cases/regression/operator-inpectFile.json index 7e7958c1..cf41743a 100644 --- a/test/test-cases/regression/operator-inpectFile.json +++ b/test/test-cases/regression/operator-inpectFile.json @@ -298,12 +298,90 @@ ] }, "expected":{ - "debug_log":"Z: \\{ \\[1\\] = \\{ \\[\"value\"\\] = res=whee&z=z&d=e,\\[\"name\"\\] = QUERY_STRING,\\} ,\\}" + "debug_log":"Z: \\{ \\[1\\] = \\{ \\[\"" }, "rules":[ "SecRuleEngine On", "SecRule QUERY_STRING \".\" \"id:2,phase:2,setvar:tx.test=2\"", "SecRule ARGS:res \"@inspectFile test-cases/data/match-getvars.lua\" \"id:1,phase:2,pass,t:trim\"" ] + }, + { + "enabled":1, + "version_min":300000, + "title":"Testing Operator :: @inspectFile - lua (6/?)", + "client":{ + "ip":"200.249.12.31", + "port":123 + }, + "server":{ + "ip":"200.249.12.31", + "port":80 + }, + "request":{ + "headers":{ + "Host":"localhost", + "User-Agent":"curl/7.38.0", + "Accept":"*/*", + "Content-Length": "27", + "Content-Type": "application/x-www-form-urlencoded" + }, + "uri":"/whee?res=whee&z=z&d=e", + "method":"GET", + "body": [ ] + }, + "response":{ + "headers":{}, + "body":[ + "no need." + ] + }, + "expected":{ + "debug_log":"Just fine." + }, + "rules":[ + "SecRuleEngine On", + "SecRule QUERY_STRING \".\" \"id:2,phase:2,setvar:tx.test=FELIPE\"", + "SecRule QUERY_STRING \"@inspectFile test-cases/data/match-getvar-transformation.lua\" \"id:1,phase:2,pass\"" + ] + }, + { + "enabled":1, + "version_min":300000, + "title":"Testing Operator :: @inspectFile - lua (7/?)", + "client":{ + "ip":"200.249.12.31", + "port":123 + }, + "server":{ + "ip":"200.249.12.31", + "port":80 + }, + "request":{ + "headers":{ + "Host":"localhost", + "User-Agent":"curl/7.38.0", + "Accept":"*/*", + "Content-Length": "27", + "Content-Type": "application/x-www-form-urlencoded" + }, + "uri":"/whee?res=whee&z=z&d=e", + "method":"GET", + "body": [ ] + }, + "response":{ + "headers":{}, + "body":[ + "no need." + ] + }, + "expected":{ + "debug_log":"Whee. Working like a charm. That is what we have: FELIPE" + }, + "rules":[ + "SecRuleEngine On", + "SecRule QUERY_STRING \".\" \"id:2,phase:2,setvar:tx.test=FeLiPe\"", + "SecRule QUERY_STRING \"@inspectFile test-cases/data/match-getvar-multi-transformations.lua\" \"id:1,phase:2,pass\"" + ] } ]