lua: store id with tx ptr

pull/7957/head
Victor Julien 4 years ago committed by Victor Julien
parent db5cf1f8f9
commit bdbaaa3b24

@ -525,7 +525,7 @@ void LuaExtensionsMatchSetup(lua_State *lua_state, DetectLuaData *ld,
if (f && f->alstate) {
void *txptr = AppLayerParserGetTx(f->proto, f->alproto, f->alstate, det_ctx->tx_id);
if (txptr) {
LuaStateSetTX(lua_state, txptr);
LuaStateSetTX(lua_state, txptr, det_ctx->tx_id);
}
}
}

@ -107,7 +107,7 @@ static int LuaTxLogger(ThreadVars *tv, void *thread_data, const Packet *p, Flow
LuaStateSetThreadVars(td->lua_ctx->luastate, tv);
LuaStateSetPacket(td->lua_ctx->luastate, (Packet *)p);
LuaStateSetTX(td->lua_ctx->luastate, txptr);
LuaStateSetTX(td->lua_ctx->luastate, txptr, tx_id);
LuaStateSetFlow(td->lua_ctx->luastate, f);
/* prepare data to pass to script */
@ -151,7 +151,7 @@ static int LuaStreamingLogger(ThreadVars *tv, void *thread_data, const Flow *f,
LuaStateSetThreadVars(td->lua_ctx->luastate, tv);
if (flags & OUTPUT_STREAMING_FLAG_TRANSACTION)
LuaStateSetTX(td->lua_ctx->luastate, txptr);
LuaStateSetTX(td->lua_ctx->luastate, txptr, tx_id);
LuaStateSetFlow(td->lua_ctx->luastate, (Flow *)f);
LuaStateSetStreamingBuffer(td->lua_ctx->luastate, &b);
@ -212,7 +212,7 @@ static int LuaPacketLoggerAlerts(ThreadVars *tv, void *thread_data, const Packet
LuaStateSetThreadVars(td->lua_ctx->luastate, tv);
LuaStateSetPacket(td->lua_ctx->luastate, (Packet *)p);
LuaStateSetTX(td->lua_ctx->luastate, txptr);
LuaStateSetTX(td->lua_ctx->luastate, txptr, pa->tx_id);
LuaStateSetFlow(td->lua_ctx->luastate, p->flow);
LuaStateSetPacketAlert(td->lua_ctx->luastate, (PacketAlert *)pa);
@ -310,7 +310,7 @@ static int LuaFileLogger(ThreadVars *tv, void *thread_data, const Packet *p, con
if (p->flow && p->flow->alstate) {
void *txptr = AppLayerParserGetTx(p->proto, p->flow->alproto, p->flow->alstate, ff->txid);
if (txptr) {
LuaStateSetTX(td->lua_ctx->luastate, txptr);
LuaStateSetTX(td->lua_ctx->luastate, txptr, ff->txid);
}
}
LuaStateSetFlow(td->lua_ctx->luastate, p->flow);

@ -820,8 +820,9 @@ static int LuaCallbackFileInfoPushToStackFromFile(lua_State *luastate, const Fil
}
}
lua_Integer tx_id = LuaStateGetTxId(luastate);
lua_pushinteger(luastate, file->file_store_id);
lua_pushinteger(luastate, file->txid);
lua_pushinteger(luastate, tx_id);
lua_pushlstring(luastate, (char *)file->name, file->name_len);
lua_pushinteger(luastate, FileTrackedSize(file));
lua_pushstring (luastate,

@ -86,6 +86,8 @@ void LuaReturnState(lua_State *s)
const char lua_ext_key_tv[] = "suricata:lua:tv:ptr";
/* key for tx pointer */
const char lua_ext_key_tx[] = "suricata:lua:tx:ptr";
/* key for tx id */
const char lua_ext_key_tx_id[] = "suricata:lua:tx_id";
/* key for p (packet) pointer */
const char lua_ext_key_p[] = "suricata:lua:pkt:ptr";
/* key for f (flow) pointer */
@ -147,11 +149,23 @@ void *LuaStateGetTX(lua_State *luastate)
return tx;
}
void LuaStateSetTX(lua_State *luastate, void *txptr)
/** \brief get tx id from the lua state */
uint64_t LuaStateGetTxId(lua_State *luastate)
{
lua_pushlightuserdata(luastate, (void *)&lua_ext_key_tx_id);
lua_gettable(luastate, LUA_REGISTRYINDEX);
uint64_t tx_id = lua_tointeger(luastate, -1);
return tx_id;
}
void LuaStateSetTX(lua_State *luastate, void *txptr, const uint64_t tx_id)
{
lua_pushlightuserdata(luastate, (void *)&lua_ext_key_tx);
lua_pushlightuserdata(luastate, (void *)txptr);
lua_settable(luastate, LUA_REGISTRYINDEX);
lua_pushlightuserdata(luastate, (void *)&lua_ext_key_tx_id);
lua_pushinteger(luastate, tx_id);
lua_settable(luastate, LUA_REGISTRYINDEX);
}
Flow *LuaStateGetFlow(lua_State *luastate)

@ -53,6 +53,7 @@ ThreadVars *LuaStateGetThreadVars(lua_State *luastate);
Packet *LuaStateGetPacket(lua_State *luastate);
void *LuaStateGetTX(lua_State *luastate);
uint64_t LuaStateGetTxId(lua_State *luastate);
/** \brief get flow pointer from lua state
*
@ -77,7 +78,7 @@ int LuaStateGetDirection(lua_State *luastate);
/* sets */
void LuaStateSetPacket(lua_State *luastate, Packet *p);
void LuaStateSetTX(lua_State *luastate, void *tx);
void LuaStateSetTX(lua_State *luastate, void *tx, const uint64_t tx_id);
/** \brief set a flow pointer in the lua state
*

Loading…
Cancel
Save