}
}
-static void CreateMeta(lua_State *luastate)
+void LuaLoadDatasetLib(lua_State *luastate)
{
luaL_newmetatable(luastate, "dataset::metatable");
- lua_pushliteral(luastate, "__index");
- lua_pushvalue(luastate, -2);
- lua_rawset(luastate, -3);
- SetFuncs(luastate, datasetlib);
-}
-
-static void LuaDatasetRegister(lua_State *luastate)
-{
- CreateMeta(luastate);
- lua_newtable(luastate);
- SetFuncs(luastate, datasetlib);
lua_pushvalue(luastate, -1);
- lua_setglobal(luastate, "dataset");
- lua_pop(luastate, 1);
- lua_pop(luastate, 1);
+ lua_setfield(luastate, -2, "__index");
+ luaL_setfuncs(luastate, datasetlib, 0);
+ luaL_newlib(luastate, datasetlib);
}
static int LuaIncrFlowint(lua_State *luastate)
lua_pushcfunction(lua_state, LuaGetByteVar);
lua_setglobal(lua_state, "SCByteVarGet");
- LuaDatasetRegister(lua_state);
-
LuaRegisterFunctions(lua_state);
LuaRegisterHttpFunctions(lua_state);
LuaRegisterDnsFunctions(lua_state);
void LuaExtensionsMatchSetup(lua_State *lua_state, DetectLuaData *, DetectEngineThreadCtx *det_ctx,
Flow *f, Packet *p, const Signature *s, uint8_t flags);
+void LuaLoadDatasetLib(lua_State *luastate);
+
#endif
#include "util-validate.h"
#include "util-lua-sandbox.h"
+/* TODO: Need to get Lua dataset support out of detect-lua-extensions,
+ * shouldn't need to pull in detect-engine, if via another include. */
+#include "detect-lua.h"
+#include "detect-engine.h"
+#include "detect-lua-extensions.h"
+
#define SANDBOX_CTX "SANDBOX_CTX"
static void HookFunc(lua_State *L, lua_Debug *ar);
// clang-format on
};
+static int SCLuaSbRequire(lua_State *L)
+{
+ const char *module_name = luaL_checkstring(L, 1);
+
+ if (strcmp(module_name, "suricata.dataset") == 0) {
+ LuaLoadDatasetLib(L);
+ return 1;
+ }
+
+ return luaL_error(L, "Module not found: %s", module_name);
+}
+
/**
* Load allowed Lua libraries into the state.
*
}
lua_pop(L, 1);
}
+
+ /* Setup our custom require. */
+ lua_pushcfunction(L, SCLuaSbRequire);
+ lua_setglobal(L, "require");
}
/**