]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
output-log: expose SCLog functions to lua scripts
authorVictor Julien <victor@inliniac.net>
Fri, 21 Feb 2014 11:20:46 +0000 (12:20 +0100)
committerVictor Julien <victor@inliniac.net>
Fri, 15 Aug 2014 11:58:25 +0000 (13:58 +0200)
The lua scripts can use SCLogDebug, SCLogInfo, SCLogNotice, SCLogWarning,
SCLogError. The latter 2 won't be able to add an error code though.

src/output-lua-common.c
src/util-error.c
src/util-error.h

index d4cbb2ee632cdc13f45ef60871e40538a514226f..5785ae5e6a3deac9d2cd806bf592b4b1c3d0f62f 100644 (file)
@@ -241,6 +241,51 @@ static int LuaCallbackLogPath(lua_State *luastate)
     return LuaReturnStringBuffer(luastate, (const uint8_t *)ld, strlen(ld));
 }
 
+static int LuaCallbackLogDebug(lua_State *luastate)
+{
+    const char *msg = LuaGetStringArgument(luastate, 1);
+    if (msg == NULL)
+        return LuaCallbackError(luastate, "1st argument missing, empty or wrong type");
+    SCLogDebug("%s", msg);
+    return 0;
+}
+
+static int LuaCallbackLogInfo(lua_State *luastate)
+{
+    const char *msg = LuaGetStringArgument(luastate, 1);
+    if (msg == NULL)
+        return LuaCallbackError(luastate, "1st argument missing, empty or wrong type");
+    SCLogInfo("%s", msg);
+    return 0;
+}
+
+static int LuaCallbackLogNotice(lua_State *luastate)
+{
+    const char *msg = LuaGetStringArgument(luastate, 1);
+    if (msg == NULL)
+        return LuaCallbackError(luastate, "1st argument missing, empty or wrong type");
+    SCLogNotice("%s", msg);
+    return 0;
+}
+
+static int LuaCallbackLogWarning(lua_State *luastate)
+{
+    const char *msg = LuaGetStringArgument(luastate, 1);
+    if (msg == NULL)
+        return LuaCallbackError(luastate, "1st argument missing, empty or wrong type");
+    SCLogWarning(SC_WARN_LUA_SCRIPT, "%s", msg);
+    return 0;
+}
+
+static int LuaCallbackLogError(lua_State *luastate)
+{
+    const char *msg = LuaGetStringArgument(luastate, 1);
+    if (msg == NULL)
+        return LuaCallbackError(luastate, "1st argument missing, empty or wrong type");
+    SCLogError(SC_ERR_LUA_SCRIPT, "%s", msg);
+    return 0;
+}
+
 int LogLuaRegisterFunctions(lua_State *luastate)
 {
     /* registration of the callbacks */
@@ -248,6 +293,17 @@ int LogLuaRegisterFunctions(lua_State *luastate)
     lua_setglobal(luastate, "SCPacketTuple");
     lua_pushcfunction(luastate, LuaCallbackLogPath);
     lua_setglobal(luastate, "SCLogPath");
+
+    lua_pushcfunction(luastate, LuaCallbackLogDebug);
+    lua_setglobal(luastate, "SCLogDebug");
+    lua_pushcfunction(luastate, LuaCallbackLogInfo);
+    lua_setglobal(luastate, "SCLogInfo");
+    lua_pushcfunction(luastate, LuaCallbackLogNotice);
+    lua_setglobal(luastate, "SCLogNotice");
+    lua_pushcfunction(luastate, LuaCallbackLogWarning);
+    lua_setglobal(luastate, "SCLogWarning");
+    lua_pushcfunction(luastate, LuaCallbackLogError);
+    lua_setglobal(luastate, "SCLogError");
     return 0;
 }
 
index 99b65ba7b5960f748786fcfeac0997267ea28b8a..68e3139279e0bc71f209306ff01b53ac9a8e16d7 100644 (file)
@@ -297,6 +297,8 @@ const char * SCErrorToString(SCError err)
         CASE_CODE (SC_ERR_CONF_NAME_TOO_LONG);
         CASE_CODE (SC_ERR_APP_LAYER_PROTOCOL_DETECTION);
         CASE_CODE (SC_ERR_PCIE_INIT_FAILED);
+        CASE_CODE (SC_WARN_LUA_SCRIPT);
+        CASE_CODE (SC_ERR_LUA_SCRIPT);
     }
 
     return "UNKNOWN_ERROR";
index 1e8eba3920a6ad284429a421b24d4f35de5508f9..30fba6cd9cf92789305a465f59c2be66e1b31e9b 100644 (file)
@@ -286,6 +286,8 @@ typedef enum {
     SC_WARN_NFLOG_LOSING_EVENTS,
     SC_WARN_NFLOG_MAXBUFSIZ_REACHED,
     SC_WARN_NFLOG_SETSOCKOPT,
+    SC_WARN_LUA_SCRIPT,
+    SC_ERR_LUA_SCRIPT,
 } SCError;
 
 const char *SCErrorToString(SCError);