From 930b38b89459721f93843b9845a30a8c20234089 Mon Sep 17 00:00:00 2001 From: Mark Stemm Date: Thu, 22 Sep 2016 14:57:43 -0700 Subject: [PATCH] Add the new pmatch operator. Make changes to the lua-specific rule parser/compiler to handle the pmatch operator. --- userspace/engine/lua/compiler.lua | 4 ++-- userspace/engine/lua/parser.lua | 2 ++ userspace/engine/lua/rule_loader.lua | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/userspace/engine/lua/compiler.lua b/userspace/engine/lua/compiler.lua index 154922c9..7c84bdc9 100644 --- a/userspace/engine/lua/compiler.lua +++ b/userspace/engine/lua/compiler.lua @@ -143,7 +143,7 @@ function check_for_ignored_syscalls_events(ast, filter_type, source) (node.left.value == "evt.type" or node.left.value == "syscall.type") then - if node.operator == "in" then + if node.operator == "in" or node.operator == "pmatch" then for i, v in ipairs(node.right.elements) do if v.type == "BareString" then if node.left.value == "evt.type" then @@ -200,7 +200,7 @@ function get_evttypes(name, ast, source) if found_not then found_event_after_not = true end - if node.operator == "in" then + if node.operator == "in" or node.operator == "pmatch" then for i, v in ipairs(node.right.elements) do if v.type == "BareString" then evtnames[v.value] = 1 diff --git a/userspace/engine/lua/parser.lua b/userspace/engine/lua/parser.lua index 8292f352..b19fbca7 100644 --- a/userspace/engine/lua/parser.lua +++ b/userspace/engine/lua/parser.lua @@ -199,6 +199,7 @@ local G = { RelationalExpression = rel(terminal "FieldName", V"RelOp", V"Value") + rel(terminal "FieldName", V"InOp", V"InList") + + rel(terminal "FieldName", V"PmatchOp", V"InList") + V"PrimaryExp"; PrimaryExp = symb("(") * V"Filter" * symb(")"); @@ -248,6 +249,7 @@ local G = { symb("glob") / "glob" + symb("startswith") / "startswith"; InOp = kw("in") / "in"; + PmatchOp = kw("pmatch") / "pmatch"; UnaryBoolOp = kw("not") / "not"; ExistsOp = kw("exists") / "exists"; diff --git a/userspace/engine/lua/rule_loader.lua b/userspace/engine/lua/rule_loader.lua index 2b7d09dc..4bc39db8 100644 --- a/userspace/engine/lua/rule_loader.lua +++ b/userspace/engine/lua/rule_loader.lua @@ -72,7 +72,7 @@ local function install_filter(node, parent_bool_op) filter.unnest() -- io.write(")") elseif t == "BinaryRelOp" then - if (node.operator == "in") then + if (node.operator == "in" or node.operator == "pmatch") then elements = map(function (el) return el.value end, node.right.elements) filter.rel_expr(node.left.value, node.operator, elements, node.index) else