]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
detect-lua: set direction
authorVictor Julien <victor@inliniac.net>
Thu, 9 Jul 2015 19:44:38 +0000 (21:44 +0200)
committerVictor Julien <victor@inliniac.net>
Fri, 4 Sep 2015 09:50:03 +0000 (11:50 +0200)
src/detect-lua-extensions.c
src/detect-lua-extensions.h
src/detect-lua.c

index c58ffa2843e94710772ad6880ade65462cb1097e..7a2657f9d354684d915210704b6be072ebdb12f4 100644 (file)
@@ -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));
 }
 
 /**
index e2edf9c6f9f3f5a7fff73f20909cde41d4733fc2..b8aa27366ee9dc1ba5f714c3d60a356a48678c98 100644 (file)
@@ -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
index 76626a01762200a38502aba1464de920fcc61877..8fd5ff61b31e32a1de1fc701f375441663902be3 100644 (file)
@@ -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;