From 1e84950017e8e74b9449c23ab7a2b35f48aef0d9 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Thu, 9 Jul 2015 21:44:38 +0200 Subject: [PATCH] detect-lua: set direction --- src/detect-lua-extensions.c | 4 +++- src/detect-lua-extensions.h | 2 +- src/detect-lua.c | 13 ++++++++++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/detect-lua-extensions.c b/src/detect-lua-extensions.c index c58ffa2843..7a2657f9d3 100644 --- a/src/detect-lua-extensions.c +++ b/src/detect-lua-extensions.c @@ -560,7 +560,7 @@ static int LuaDecrFlowint(lua_State *luastate) } void LuaExtensionsMatchSetup(lua_State *lua_state, DetectLuaData *ld, DetectEngineThreadCtx *det_ctx, - Flow *f, int flow_locked, Packet *p) + Flow *f, int flow_locked, Packet *p, uint8_t flags) { SCLogDebug("det_ctx %p, f %p", det_ctx, f); @@ -587,6 +587,8 @@ void LuaExtensionsMatchSetup(lua_State *lua_state, DetectLuaData *ld, DetectEngi if (p != NULL) LuaStateSetPacket(lua_state, p); + + LuaStateSetDirection(lua_state, (flags & STREAM_TOSERVER)); } /** diff --git a/src/detect-lua-extensions.h b/src/detect-lua-extensions.h index e2edf9c6f9..b8aa27366e 100644 --- a/src/detect-lua-extensions.h +++ b/src/detect-lua-extensions.h @@ -29,7 +29,7 @@ int LuaRegisterExtensions(lua_State *); void LuaExtensionsMatchSetup(lua_State *lua_state, DetectLuaData *, DetectEngineThreadCtx *det_ctx, - Flow *f, int flow_locked, Packet *p); + Flow *f, int flow_locked, Packet *p, uint8_t flags); #endif /* HAVE_LUA */ #endif diff --git a/src/detect-lua.c b/src/detect-lua.c index 76626a0176..8fd5ff61b3 100644 --- a/src/detect-lua.c +++ b/src/detect-lua.c @@ -301,7 +301,7 @@ int DetectLuaMatchBuffer(DetectEngineThreadCtx *det_ctx, Signature *s, SigMatch /* setup extension data for use in lua c functions */ LuaExtensionsMatchSetup(tluajit->luastate, luajit, det_ctx, - f, flow_lock, /* no packet in the ctx */NULL); + f, flow_lock, /* no packet in the ctx */NULL, 0); /* prepare data to pass to script */ lua_getglobal(tluajit->luastate, "match"); @@ -402,8 +402,14 @@ static int DetectLuaMatch (ThreadVars *tv, DetectEngineThreadCtx *det_ctx, SCReturnInt(0); /* setup extension data for use in lua c functions */ + uint8_t flags = 0; + if (p->flowflags & FLOW_PKT_TOSERVER) + flags = STREAM_TOSERVER; + else if (p->flowflags & FLOW_PKT_TOCLIENT) + flags = STREAM_TOCLIENT; + LuaExtensionsMatchSetup(tluajit->luastate, luajit, det_ctx, - p->flow, /* flow not locked */LUA_FLOW_NOT_LOCKED_BY_PARENT, p); + p->flow, /* flow not locked */LUA_FLOW_NOT_LOCKED_BY_PARENT, p, flags); if ((tluajit->flags & DATATYPE_PAYLOAD) && p->payload_len == 0) SCReturnInt(0); @@ -533,7 +539,8 @@ static int DetectLuaAppMatchCommon (ThreadVars *t, DetectEngineThreadCtx *det_ct /* setup extension data for use in lua c functions */ LuaExtensionsMatchSetup(tluajit->luastate, luajit, det_ctx, - f, /* flow is locked */LUA_FLOW_LOCKED_BY_PARENT, NULL); + f, /* flow is locked */LUA_FLOW_LOCKED_BY_PARENT, + NULL, flags); if (tluajit->alproto != ALPROTO_UNKNOWN) { int alproto = f->alproto;