]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
lua: introduce util-lua.[ch]
authorVictor Julien <victor@inliniac.net>
Fri, 28 Feb 2014 15:18:48 +0000 (16:18 +0100)
committerVictor Julien <victor@inliniac.net>
Fri, 15 Aug 2014 11:58:26 +0000 (13:58 +0200)
Shared functions for all lua parts of the engine.

src/Makefile.am
src/output-lua-common.c
src/output-lua-common.h
src/output-lua-http.c
src/output-lua.c
src/util-lua.c [new file with mode: 0644]
src/util-lua.h [new file with mode: 0644]

index 6cb523d15258484e4a0b0d2defb4673a95d0895e..f814306238e5e77fe6826aafa9eaaaab1b8ffe4a 100644 (file)
@@ -320,6 +320,7 @@ util-ioctl.h util-ioctl.c \
 util-ip.h util-ip.c \
 util-logopenfile.h util-logopenfile.c \
 util-logopenfile-tile.h util-logopenfile-tile.c \
+util-lua.c util-lua.h \
 util-magic.c util-magic.h \
 util-memcmp.c util-memcmp.h \
 util-memcpy.h \
index 5785ae5e6a3deac9d2cd806bf592b4b1c3d0f62f..a1db92b139059961eccff50f63e2a6443e5b14cc 100644 (file)
 #include <lualib.h>
 #include <lauxlib.h>
 
-/** \brief dump stack from lua state to screen */
-void LuaPrintStack(lua_State *state) {
-    int size = lua_gettop(state);
-    int i;
-
-    for (i = 1; i <= size; i++) {
-        int type = lua_type(state, i);
-        printf("Stack size=%d, level=%d, type=%d, ", size, i, type);
-
-        switch (type) {
-            case LUA_TFUNCTION:
-                printf("function %s", lua_tostring(state, i) ? "true" : "false");
-                break;
-            case LUA_TBOOLEAN:
-                printf("bool %s", lua_toboolean(state, i) ? "true" : "false");
-                break;
-            case LUA_TNUMBER:
-                printf("number %g", lua_tonumber(state, i));
-                break;
-            case LUA_TSTRING:
-                printf("string `%s'", lua_tostring(state, i));
-                break;
-            case LUA_TTABLE:
-                printf("table `%s'", lua_tostring(state, i));
-                break;
-            default:
-                printf("other %s", lua_typename(state, type));
-                break;
-
-        }
-        printf("\n");
-    }
-}
-
-extern const char lualog_ext_key_tx;
-extern const char lualog_ext_key_p;
-
-Packet *LuaStateGetPacket(lua_State *luastate)
-{
-    lua_pushlightuserdata(luastate, (void *)&lualog_ext_key_p);
-    lua_gettable(luastate, LUA_REGISTRYINDEX);
-    void *p = lua_touserdata(luastate, -1);
-    return (Packet *)p;
-}
-
-void *LuaStateGetTX(lua_State *luastate)
-{
-    lua_pushlightuserdata(luastate, (void *)&lualog_ext_key_tx);
-    lua_gettable(luastate, LUA_REGISTRYINDEX);
-    void *tx = lua_touserdata(luastate, -1);
-    return tx;
-}
+#include "util-lua.h"
 
 int LuaCallbackError(lua_State *luastate, const char *msg)
 {
index 0f8b26d9cb0b498beed46ed89d27dd0750f7162c..a03fb1667dba25baad994ea1d6ecc0e0f1826ec0 100644 (file)
 
 #ifdef HAVE_LUA
 
-void LuaPrintStack(lua_State *state);
-
-Packet *LuaStateGetPacket(lua_State *luastate);
-void *LuaStateGetTX(lua_State *luastate);
-
 int LuaCallbackError(lua_State *luastate, const char *msg);
 int LuaReturnStringBuffer(lua_State *luastate, const uint8_t *input, size_t input_len);
 const char *LuaGetStringArgument(lua_State *luastate, int argc);
index d2bc2aaeb3e2e59faf3f894c5ab6237e69745d4e..7b209a3a3a0e682017fe8a1732e0123a8bb38154 100644 (file)
@@ -53,6 +53,7 @@
 #include <lualib.h>
 #include <lauxlib.h>
 
+#include "util-lua.h"
 #include "output-lua-common.h"
 
 static int HttpGetRequestUriRaw(lua_State *luastate)
index 9e0a8cf8afcd6588262b2e943638d2c22a36651d..d774f95632a41d8cdbf3e6da45196c2325aa60a7 100644 (file)
@@ -53,6 +53,7 @@
 #include <lualib.h>
 #include <lauxlib.h>
 
+#include "util-lua.h"
 #include "output-lua-common.h"
 #include "output-lua-http.h"
 
@@ -68,11 +69,6 @@ typedef struct LogLuaThreadCtx_ {
     LogLuaCtx *lua_ctx;
 } LogLuaThreadCtx;
 
-/* key for tx pointer */
-const char lualog_ext_key_tx[] = "suricata:lualog:tx:ptr";
-/* key for p (packet) pointer */
-const char lualog_ext_key_p[] = "suricata:lualog:pkt:ptr";
-
 /** \internal
  *  \brief TX logger for lua scripts
  *
@@ -89,14 +85,8 @@ static int LuaTxLogger(ThreadVars *tv, void *thread_data, const Packet *p, Flow
 
     SCMutexLock(&td->lua_ctx->m);
 
-    /* we need the p in our callbacks */
-    lua_pushlightuserdata(td->lua_ctx->luastate, (void *)&lualog_ext_key_p);
-    lua_pushlightuserdata(td->lua_ctx->luastate, (void *)p);
-    lua_settable(td->lua_ctx->luastate, LUA_REGISTRYINDEX);
-    /* we need the tx in our callbacks */
-    lua_pushlightuserdata(td->lua_ctx->luastate, (void *)&lualog_ext_key_tx);
-    lua_pushlightuserdata(td->lua_ctx->luastate, (void *)txptr);
-    lua_settable(td->lua_ctx->luastate, LUA_REGISTRYINDEX);
+    LuaStateSetPacket(td->lua_ctx->luastate, (Packet *)p);
+    LuaStateSetTX(td->lua_ctx->luastate, txptr);
 
     /* prepare data to pass to script */
     lua_getglobal(td->lua_ctx->luastate, "log");
@@ -160,10 +150,7 @@ static int LuaPacketLoggerAlerts(ThreadVars *tv, void *thread_data, const Packet
 
         lua_getglobal(td->lua_ctx->luastate, "log");
 
-        /* we need the p in our callbacks */
-        lua_pushlightuserdata(td->lua_ctx->luastate, (void *)&lualog_ext_key_p);
-        lua_pushlightuserdata(td->lua_ctx->luastate, (void *)p);
-        lua_settable(td->lua_ctx->luastate, LUA_REGISTRYINDEX);
+        LuaStateSetPacket(td->lua_ctx->luastate, (Packet *)p);
 
         /* prepare data to pass to script */
         lua_newtable(td->lua_ctx->luastate);
@@ -236,10 +223,7 @@ static int LuaPacketLogger(ThreadVars *tv, void *thread_data, const Packet *p)
     SCMutexLock(&td->lua_ctx->m);
     lua_getglobal(td->lua_ctx->luastate, "log");
 
-    /* we need the p in our callbacks */
-    lua_pushlightuserdata(td->lua_ctx->luastate, (void *)&lualog_ext_key_p);
-    lua_pushlightuserdata(td->lua_ctx->luastate, (void *)p);
-    lua_settable(td->lua_ctx->luastate, LUA_REGISTRYINDEX);
+    LuaStateSetPacket(td->lua_ctx->luastate, (Packet *)p);
 
     /* prepare data to pass to script */
     lua_newtable(td->lua_ctx->luastate);
@@ -287,14 +271,8 @@ static int LuaFileLogger(ThreadVars *tv, void *thread_data, const Packet *p, con
 
     SCMutexLock(&td->lua_ctx->m);
 
-    /* we need the p in our callbacks */
-    lua_pushlightuserdata(td->lua_ctx->luastate, (void *)&lualog_ext_key_p);
-    lua_pushlightuserdata(td->lua_ctx->luastate, (void *)p);
-    lua_settable(td->lua_ctx->luastate, LUA_REGISTRYINDEX);
-    /* we need the tx in our callbacks */
-    lua_pushlightuserdata(td->lua_ctx->luastate, (void *)&lualog_ext_key_tx);
-    lua_pushlightuserdata(td->lua_ctx->luastate, (void *)txptr);
-    lua_settable(td->lua_ctx->luastate, LUA_REGISTRYINDEX);
+    LuaStateSetPacket(td->lua_ctx->luastate, (Packet *)p);
+    LuaStateSetTX(td->lua_ctx->luastate, txptr);
 
     /* get the lua function to call */
     lua_getglobal(td->lua_ctx->luastate, "log");
diff --git a/src/util-lua.c b/src/util-lua.c
new file mode 100644 (file)
index 0000000..0e08dca
--- /dev/null
@@ -0,0 +1,131 @@
+/* Copyright (C) 2014 Open Information Security Foundation
+ *
+ * You can copy, redistribute or modify this Program under the terms of
+ * the GNU General Public License version 2 as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+/**
+ * \file
+ *
+ * \author Victor Julien <victor@inliniac.net>
+ *
+ * Common function for Lua
+ */
+
+#include "suricata-common.h"
+#include "debug.h"
+#include "detect.h"
+#include "pkt-var.h"
+#include "conf.h"
+
+#include "threads.h"
+#include "threadvars.h"
+#include "tm-threads.h"
+
+#include "util-print.h"
+#include "util-unittest.h"
+
+#include "util-debug.h"
+
+#include "output.h"
+#include "app-layer-htp.h"
+#include "app-layer.h"
+#include "app-layer-parser.h"
+#include "util-privs.h"
+#include "util-buffer.h"
+#include "util-proto-name.h"
+#include "util-logopenfile.h"
+#include "util-time.h"
+
+#ifdef HAVE_LUA
+
+#include <lua.h>
+#include <lualib.h>
+#include <lauxlib.h>
+
+/* key for tx pointer */
+const char lua_ext_key_tx[] = "suricata:lua:tx:ptr";
+/* key for p (packet) pointer */
+const char lua_ext_key_p[] = "suricata:lua:pkt:ptr";
+
+/** \brief get packet pointer from the lua state */
+Packet *LuaStateGetPacket(lua_State *luastate)
+{
+    lua_pushlightuserdata(luastate, (void *)&lua_ext_key_p);
+    lua_gettable(luastate, LUA_REGISTRYINDEX);
+    void *p = lua_touserdata(luastate, -1);
+    return (Packet *)p;
+}
+
+void LuaStateSetPacket(lua_State *luastate, Packet *p)
+{
+    lua_pushlightuserdata(luastate, (void *)&lua_ext_key_p);
+    lua_pushlightuserdata(luastate, (void *)p);
+    lua_settable(luastate, LUA_REGISTRYINDEX);
+}
+
+/** \brief get tx pointer from the lua state */
+void *LuaStateGetTX(lua_State *luastate)
+{
+    lua_pushlightuserdata(luastate, (void *)&lua_ext_key_tx);
+    lua_gettable(luastate, LUA_REGISTRYINDEX);
+    void *tx = lua_touserdata(luastate, -1);
+    return tx;
+}
+
+void LuaStateSetTX(lua_State *luastate, void *txptr)
+{
+    lua_pushlightuserdata(luastate, (void *)&lua_ext_key_tx);
+    lua_pushlightuserdata(luastate, (void *)txptr);
+    lua_settable(luastate, LUA_REGISTRYINDEX);
+}
+
+/** \brief dump stack from lua state to screen */
+void LuaPrintStack(lua_State *state) {
+    int size = lua_gettop(state);
+    int i;
+
+    for (i = 1; i <= size; i++) {
+        int type = lua_type(state, i);
+        printf("Stack size=%d, level=%d, type=%d, ", size, i, type);
+
+        switch (type) {
+            case LUA_TFUNCTION:
+                printf("function %s", lua_tostring(state, i) ? "true" : "false");
+                break;
+            case LUA_TBOOLEAN:
+                printf("bool %s", lua_toboolean(state, i) ? "true" : "false");
+                break;
+            case LUA_TNUMBER:
+                printf("number %g", lua_tonumber(state, i));
+                break;
+            case LUA_TSTRING:
+                printf("string `%s'", lua_tostring(state, i));
+                break;
+            case LUA_TTABLE:
+                printf("table `%s'", lua_tostring(state, i));
+                break;
+            default:
+                printf("other %s", lua_typename(state, type));
+                break;
+
+        }
+        printf("\n");
+    }
+}
+
+
+
+
+#endif /* HAVE_LUA */
diff --git a/src/util-lua.h b/src/util-lua.h
new file mode 100644 (file)
index 0000000..831dda6
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright (C) 2014 Open Information Security Foundation
+ *
+ * You can copy, redistribute or modify this Program under the terms of
+ * the GNU General Public License version 2 as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+/**
+ * \file
+ *
+ * \author Victor Julien <victor@inliniac.net>
+ */
+
+#ifndef __UTIL_LUA_H__
+#define __UTIL_LUA_H__
+
+#ifdef HAVE_LUA
+
+Packet *LuaStateGetPacket(lua_State *luastate);
+void *LuaStateGetTX(lua_State *luastate);
+
+void LuaStateSetPacket(lua_State *luastate, Packet *p);
+void LuaStateSetTX(lua_State *luastate, void *tx);
+
+void LuaPrintStack(lua_State *state);
+
+#endif /* HAVE_LUA */
+
+#endif /* __UTIL_LUA_H__ */