]> git.ipfire.org Git - thirdparty/suricata-verify.git/commitdiff
tests/lua: update SCByteVar tests for suricata.bytevar lib
authorJason Ish <jason.ish@oisf.net>
Mon, 2 Jun 2025 20:32:28 +0000 (14:32 -0600)
committerJason Ish <jason.ish@oisf.net>
Tue, 3 Jun 2025 17:37:09 +0000 (11:37 -0600)
tests/lua-byte-extract-pre8/README.md [new file with mode: 0644]
tests/lua-byte-extract-pre8/lua-byte-extract.lua [new file with mode: 0644]
tests/lua-byte-extract-pre8/lua-byte-math.lua [new file with mode: 0644]
tests/lua-byte-extract-pre8/test.rules [new file with mode: 0644]
tests/lua-byte-extract-pre8/test.yaml [new file with mode: 0644]
tests/lua-byte-extract/lua-byte-extract.lua
tests/lua-byte-extract/lua-byte-math.lua
tests/lua-byte-extract/test.yaml

diff --git a/tests/lua-byte-extract-pre8/README.md b/tests/lua-byte-extract-pre8/README.md
new file mode 100644 (file)
index 0000000..dfcc27a
--- /dev/null
@@ -0,0 +1 @@
+Tests Lua's accessing variables from byte_extract and byte_math in lua match scripts.
diff --git a/tests/lua-byte-extract-pre8/lua-byte-extract.lua b/tests/lua-byte-extract-pre8/lua-byte-extract.lua
new file mode 100644 (file)
index 0000000..d8fd067
--- /dev/null
@@ -0,0 +1,17 @@
+function init(args)
+    local needs = {}
+    needs["bytevar"] = {"var1", "var2"}
+    return needs
+end
+
+function match(args)
+    local var1 = SCByteVarGet(0)
+    local var2 = SCByteVarGet(1)
+
+    if var1 and var2 then
+        if var1 == 0x48545450 and var2 == 0x2f312e31 then
+            return 1
+        end
+    end
+    return 0
+end
diff --git a/tests/lua-byte-extract-pre8/lua-byte-math.lua b/tests/lua-byte-extract-pre8/lua-byte-math.lua
new file mode 100644 (file)
index 0000000..02cd4b1
--- /dev/null
@@ -0,0 +1,15 @@
+function init(args)
+    local needs = {}
+    needs["bytevar"] = {"var2"}
+    return needs
+end
+
+function match(args)
+    local var2 = SCByteVarGet(0)
+
+    if var2 and var2 == 0x48545450 then
+        return 1
+    end
+
+    return 0
+end
diff --git a/tests/lua-byte-extract-pre8/test.rules b/tests/lua-byte-extract-pre8/test.rules
new file mode 100644 (file)
index 0000000..5774d73
--- /dev/null
@@ -0,0 +1,2 @@
+alert ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; byte_extract:4,0,var1; byte_extract:4,4,var2; lua:lua-byte-extract.lua; sid:1; rev:7;)
+alert ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; byte_math: bytes 4, offset 0, oper +, rvalue 0, result var2; lua:lua-byte-math.lua; sid:2; rev:7;)
diff --git a/tests/lua-byte-extract-pre8/test.yaml b/tests/lua-byte-extract-pre8/test.yaml
new file mode 100644 (file)
index 0000000..3884648
--- /dev/null
@@ -0,0 +1,22 @@
+pcap: ../flowbit-oring/input.pcap
+
+requires:
+  min-version: 7
+  lt-version: 8
+
+  features:
+    - HAVE_LUA
+
+args:
+   - --set default-rule-path=${TEST_DIR}
+   - --set security.lua.allow-rules=true
+
+checks:
+  - filter:
+      count: 1
+      match:
+        alert.signature_id: 1
+  - filter:
+      count: 1
+      match:
+        alert.signature_id: 2
index d8fd067e218f4ff5253b7549e70bae34f8d36fc4..16a982670ea8ea025ee75ee3c2c237a9ea1651a0 100644 (file)
@@ -1,12 +1,19 @@
-function init(args)
-    local needs = {}
-    needs["bytevar"] = {"var1", "var2"}
-    return needs
+local bytevars = require("suricata.bytevar")
+
+function init(sig)
+    bytevars.map(sig, "var1")
+    bytevars.map(sig, "var2")
+    return {}
+end
+
+function thread_init()
+    bv0 = bytevars.get("var1")
+    bv1 = bytevars.get("var2")
 end
 
 function match(args)
-    local var1 = SCByteVarGet(0)
-    local var2 = SCByteVarGet(1)
+    local var1 = bv0:value()
+    local var2 = bv1:value()
 
     if var1 and var2 then
         if var1 == 0x48545450 and var2 == 0x2f312e31 then
index 02cd4b1b00d7aa3c6c75d9ac93753d5f45114d4e..45216b603b7bc7b712cfaa1fe50c391524eda477 100644 (file)
@@ -1,11 +1,16 @@
-function init(args)
-    local needs = {}
-    needs["bytevar"] = {"var2"}
-    return needs
+local bytevars = require("suricata.bytevar")
+
+function init(sig)
+    bytevars.map(sig, "var2")
+    return {}
+end
+
+function thread_init()
+    bv2 = bytevars.get("var2")
 end
 
 function match(args)
-    local var2 = SCByteVarGet(0)
+    local var2 = bv2:value()
 
     if var2 and var2 == 0x48545450 then
         return 1
index f94fcc70f9469f3a0fe3893e238a15458148dac7..a0782c24879e9b06d24731688678fe9e9e79b067 100644 (file)
@@ -1,10 +1,7 @@
 pcap: ../flowbit-oring/input.pcap
 
 requires:
-  min-version: 7
-
-  features:
-    - HAVE_LUA
+  min-version: 8
 
 args:
    - --set default-rule-path=${TEST_DIR}