luajit: pass calling rule's sid,gid,rev to script as SCRuleSid, SCRuleGid, SCRuleRev.

pull/682/head
Victor Julien 12 years ago
parent f76448c1e6
commit ae69a4a024

@ -499,6 +499,13 @@ static void *DetectLuajitThreadInit(void *data) {
LuajitRegisterExtensions(t->luastate);
lua_pushinteger(t->luastate, (lua_Integer)(luajit->sid));
lua_setglobal(t->luastate, "SCRuleSid");
lua_pushinteger(t->luastate, (lua_Integer)(luajit->rev));
lua_setglobal(t->luastate, "SCRuleRev");
lua_pushinteger(t->luastate, (lua_Integer)(luajit->gid));
lua_setglobal(t->luastate, "SCRuleGid");
/* hackish, needed to allow unittests to pass buffers as scripts instead of files */
#ifdef UNITTESTS
if (ut_script != NULL) {
@ -869,6 +876,26 @@ error:
return -1;
}
/** \brief post-sig parse function to set the sid,rev,gid into the
* ctx, as this isn't available yet during parsing.
*/
void DetectLuajitPostSetup(Signature *s) {
int i;
SigMatch *sm;
for (i = 0; i < DETECT_SM_LIST_MAX; i++) {
for (sm = s->sm_lists[i]; sm != NULL; sm = sm->next) {
if (sm->type != DETECT_LUAJIT)
continue;
DetectLuajitData *ld = sm->ctx;
ld->sid = s->id;
ld->rev = s->rev;
ld->gid = s->gid;
}
}
}
/**
* \brief this function will free memory associated with DetectLuajitData
*

@ -50,6 +50,9 @@ typedef struct DetectLuajitData {
uint16_t flowints;
uint16_t flowvar[DETECT_LUAJIT_MAX_FLOWVARS];
uint16_t flowvars;
uint32_t sid;
uint32_t rev;
uint32_t gid;
} DetectLuajitData;
#endif
@ -60,5 +63,6 @@ int DetectLuajitMatchBuffer(DetectEngineThreadCtx *det_ctx, Signature *s, SigMat
Flow *f, int need_flow_lock);
int DetectLuajitSetupStatesPool(int num, int reloads);
void DetectLuajitPostSetup(Signature *s);
#endif /* __DETECT_FILELUAJIT_H__ */

@ -41,6 +41,7 @@
#include "detect-flow.h"
#include "detect-app-layer-protocol.h"
#include "detect-engine-apt-event.h"
#include "detect-luajit.h"
#include "pkt-var.h"
#include "host.h"
@ -1331,6 +1332,10 @@ int SigValidate(DetectEngineCtx *de_ctx, Signature *s) {
}
}
#ifdef HAVE_LUAJIT
DetectLuajitPostSetup(s);
#endif
#ifdef DEBUG
int i;
for (i = 0; i < DETECT_SM_LIST_MAX; i++) {

Loading…
Cancel
Save