]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
flowvar/luajit: make 'sets' real time. Needed for cross HTTP-header matching.
authorVictor Julien <victor@inliniac.net>
Mon, 22 Apr 2013 15:56:29 +0000 (17:56 +0200)
committerVictor Julien <victor@inliniac.net>
Wed, 22 May 2013 13:06:04 +0000 (15:06 +0200)
src/detect-luajit-extensions.c

index 1f8bfea1baf2a96c50e119bf7c570de99e333c68..74b0637cc44f7c01a3b5d51c2181007c6f10b839 100644 (file)
@@ -165,6 +165,7 @@ int LuajitSetFlowvar(lua_State *luastate) {
     uint8_t *buffer;
     DetectEngineThreadCtx *det_ctx;
     DetectLuajitData *ld;
+    int need_flow_lock = 0;
 
     /* need luajit data for id -> idx conversion */
     lua_pushlightuserdata(luastate, (void *)&luaext_key_ld);
@@ -199,6 +200,11 @@ int LuajitSetFlowvar(lua_State *luastate) {
         return 2;
     }
 
+    /* need flow lock hint */
+    lua_pushlightuserdata(luastate, (void *)&luaext_key_need_flow_lock);
+    lua_gettable(luastate, LUA_REGISTRYINDEX);
+    need_flow_lock = lua_toboolean(luastate, -1);
+
     /* need flowvar idx */
     if (!lua_isnumber(luastate, 1)) {
         lua_pushnil(luastate);
@@ -252,15 +258,11 @@ int LuajitSetFlowvar(lua_State *luastate) {
     memcpy(buffer, str, len);
     buffer[len] = '\0';
 
-    if (DetectFlowvarStoreMatch(det_ctx, idx, buffer, len,
-                DETECT_FLOWVAR_TYPE_ALWAYS) < 0) {
-        SCLogInfo("store failed");
-        SCFree(buffer);
+    if (need_flow_lock)
+        FlowVarAddStr(f, idx, buffer, len);
+    else
+        FlowVarAddStrNoLock(f, idx, buffer, len);
 
-        lua_pushnil(luastate);
-        lua_pushstring(luastate, "store failed");
-        return 2;
-    }
     //SCLogInfo("stored:");
     //PrintRawDataFp(stdout,buffer,len);
     return 0;