flowvar/luajit: make 'sets' real time. Needed for cross HTTP-header matching.

pull/378/head
Victor Julien 13 years ago
parent 72f6bc2aed
commit f312486c6e

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

Loading…
Cancel
Save