From: Vsevolod Stakhov Date: Sat, 4 Nov 2017 12:42:14 +0000 (+0000) Subject: [Rework] Stop embedding rspamadm scripts into C X-Git-Tag: 1.7.0~486 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3cf2f3130034e46ff0224cc576626599422e8401;p=thirdparty%2Frspamd.git [Rework] Stop embedding rspamadm scripts into C --- diff --git a/src/rspamadm/ansicolors.lua.in b/lualib/rspamadm/ansicolors.lua similarity index 93% rename from src/rspamadm/ansicolors.lua.in rename to lualib/rspamadm/ansicolors.lua index 1e9ca2065f..739cf427c6 100644 --- a/src/rspamadm/ansicolors.lua.in +++ b/lualib/rspamadm/ansicolors.lua @@ -10,7 +10,7 @@ function colormt:__concat(other) end function colormt:__call(s) - return self .. s .. _M.reset + return self .. s .. ansicolors.reset end colormt.__metatable = {} @@ -54,3 +54,5 @@ local colors = { for c, v in pairs(colors) do ansicolors[c] = makecolor(v) end + +return ansicolors \ No newline at end of file diff --git a/src/rspamadm/confighelp.lua b/lualib/rspamadm/confighelp.lua similarity index 95% rename from src/rspamadm/confighelp.lua rename to lualib/rspamadm/confighelp.lua index e95dd0b368..a03578b6ec 100644 --- a/src/rspamadm/confighelp.lua +++ b/lualib/rspamadm/confighelp.lua @@ -7,9 +7,8 @@ local known_attrs = { default = 1, } ---.USE "getopt" ---.USE "ansicolors" - +local getopt = require "rspamadm/getopt" +local ansicolors = require "rspamadm/ansicolors" local function maybe_print_color(key) if not opts['no-color'] then @@ -101,7 +100,7 @@ local function print_help(key, value, tabs) end return function(args, res) - opts = getopt(args, '') + opts = getopt.getopt(args, '') local sorted = sort_values(res) diff --git a/src/rspamadm/fuzzy_convert.lua b/lualib/rspamadm/fuzzy_convert.lua similarity index 100% rename from src/rspamadm/fuzzy_convert.lua rename to lualib/rspamadm/fuzzy_convert.lua diff --git a/src/rspamadm/fuzzy_stat.lua b/lualib/rspamadm/fuzzy_stat.lua similarity index 98% rename from src/rspamadm/fuzzy_stat.lua rename to lualib/rspamadm/fuzzy_stat.lua index 401b297d13..748dbda202 100644 --- a/src/rspamadm/fuzzy_stat.lua +++ b/lualib/rspamadm/fuzzy_stat.lua @@ -141,13 +141,13 @@ local function print_result(r) return print_num(r) end ---.USE "getopt" +local getopt = require "rspamadm/getopt" return function(args, res) local res_ips = {} local res_databases = {} local wrk = res['workers'] - opts = getopt(args, '') + opts = getopt.getopt(args, '') if wrk then for _,pr in pairs(wrk) do diff --git a/src/rspamadm/getopt.lua.in b/lualib/rspamadm/getopt.lua similarity index 96% rename from src/rspamadm/getopt.lua.in rename to lualib/rspamadm/getopt.lua index d069d2d5fa..bd0a2f67e9 100644 --- a/src/rspamadm/getopt.lua.in +++ b/lualib/rspamadm/getopt.lua @@ -29,3 +29,6 @@ local function getopt(arg, options) return tab end +return { + getopt = getopt +} diff --git a/src/rspamadm/grep.lua b/lualib/rspamadm/grep.lua similarity index 100% rename from src/rspamadm/grep.lua rename to lualib/rspamadm/grep.lua diff --git a/src/rspamadm/stat_convert.lua b/lualib/rspamadm/stat_convert.lua similarity index 100% rename from src/rspamadm/stat_convert.lua rename to lualib/rspamadm/stat_convert.lua diff --git a/src/rspamadm/CMakeLists.txt b/src/rspamadm/CMakeLists.txt index 752e23d8b6..7e991372ab 100644 --- a/src/rspamadm/CMakeLists.txt +++ b/src/rspamadm/CMakeLists.txt @@ -21,16 +21,7 @@ SET(RSPAMADMSRC rspamadm.c ${CMAKE_SOURCE_DIR}/src/worker.c ${CMAKE_SOURCE_DIR}/src/rspamd_proxy.c ${CMAKE_SOURCE_DIR}/src/log_helper.c) -SET(RSPAMADMLUASRC - ${CMAKE_CURRENT_SOURCE_DIR}/fuzzy_stat.lua - ${CMAKE_CURRENT_SOURCE_DIR}/confighelp.lua) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) -ADD_CUSTOM_TARGET(rspamadm_lua_preprocess - ${PERL_EXECUTABLE} - "${CMAKE_SOURCE_DIR}/lua_preprocess.pl" - "${CMAKE_CURRENT_SOURCE_DIR}" - "${CMAKE_CURRENT_BINARY_DIR}" - SOURCES ${RSPAMADMLUASRC} ${CMAKE_SOURCE_DIR}/lua_preprocess.pl) IF (ENABLE_HYPERSCAN MATCHES "ON") LIST(APPEND RSPAMADMSRC "${CMAKE_SOURCE_DIR}/src/hs_helper.c") ENDIF() diff --git a/src/rspamadm/confighelp.c b/src/rspamadm/confighelp.c index a64afe4b01..f3da9422d5 100644 --- a/src/rspamadm/confighelp.c +++ b/src/rspamadm/confighelp.c @@ -85,6 +85,7 @@ rspamadm_confighelp_show (struct rspamd_config *cfg, gint argc, gchar **argv, { rspamd_fstring_t *out; + rspamd_lua_set_path (cfg->lua_state, NULL, NULL); out = rspamd_fstring_new (); if (json) { @@ -107,7 +108,7 @@ rspamadm_confighelp_show (struct rspamd_config *cfg, gint argc, gchar **argv, argc, argv, obj, - rspamadm_script_confighelp); + "confighelp"); rspamd_fstring_free (out); return; diff --git a/src/rspamadm/fuzzy_convert.c b/src/rspamadm/fuzzy_convert.c index dc15b7e387..a143b89d9c 100644 --- a/src/rspamadm/fuzzy_convert.c +++ b/src/rspamadm/fuzzy_convert.c @@ -17,7 +17,6 @@ #include "config.h" #include "rspamadm.h" #include "lua/lua_common.h" -#include "fuzzy_convert.lua.h" static gchar *source_db = NULL; static gchar *redis_host = NULL; @@ -109,6 +108,7 @@ rspamadm_fuzzyconvert (gint argc, gchar **argv) } L = rspamd_lua_init (); + rspamd_lua_set_path (L, NULL, NULL); obj = ucl_object_typed_new (UCL_OBJECT); ucl_object_insert_key (obj, ucl_object_fromstring (source_db), @@ -132,7 +132,7 @@ rspamadm_fuzzyconvert (gint argc, gchar **argv) argc, argv, obj, - rspamadm_script_fuzzy_convert); + "fuzzy_convert"); lua_close (L); ucl_object_unref (obj); diff --git a/src/rspamadm/grep.c b/src/rspamadm/grep.c index 9665b40e86..2ce4f2c767 100644 --- a/src/rspamadm/grep.c +++ b/src/rspamadm/grep.c @@ -17,7 +17,6 @@ #include "config.h" #include "rspamadm.h" #include "lua/lua_common.h" -#include "grep.lua.h" static gchar *string = NULL; static gchar *pattern = NULL; @@ -115,6 +114,7 @@ rspamadm_grep (gint argc, gchar **argv) } L = rspamd_lua_init (); + rspamd_lua_set_path (L, NULL, NULL); obj = ucl_object_typed_new (UCL_OBJECT); if (string) { @@ -148,7 +148,7 @@ rspamadm_grep (gint argc, gchar **argv) argc, argv, obj, - rspamadm_script_grep); + "grep"); lua_close (L); ucl_object_unref (obj); diff --git a/src/rspamadm/rspamadm.c b/src/rspamadm/rspamadm.c index d524a8f61c..f58da84afd 100644 --- a/src/rspamadm/rspamadm.c +++ b/src/rspamadm/rspamadm.c @@ -187,28 +187,30 @@ rspamadm_parse_ucl_var (const gchar *option_name, gboolean rspamadm_execute_lua_ucl_subr (gpointer pL, gint argc, gchar **argv, - const ucl_object_t *res, const gchar *script) + const ucl_object_t *res, const gchar *script_name) { lua_State *L = pL; gint err_idx, i, ret; GString *tb; + gchar str[PATH_MAX]; - g_assert (script != NULL); + g_assert (script_name != NULL); g_assert (res != NULL); g_assert (L != NULL); - if (luaL_dostring (L, script) != 0) { - msg_err ("cannot execute lua script: %s", - lua_tostring (L, -1)); + rspamd_snprintf (str, sizeof (str), "return require \"%s.%s\"", "rspamadm", + script_name); + + if (luaL_dostring (L, str) != 0) { + msg_err ("cannot execute lua script %s: %s", + str, lua_tostring (L, -1)); return FALSE; } else { if (lua_type (L, -1) != LUA_TFUNCTION) { msg_err ("lua script must return " "function and not %s", - lua_typename (L, - lua_type (L, -1))); - lua_settop (L, 0); + lua_typename (L, lua_type (L, -1))); return FALSE; } @@ -233,7 +235,7 @@ rspamadm_execute_lua_ucl_subr (gpointer pL, gint argc, gchar **argv, if ((ret = lua_pcall (L, 2, 0, err_idx)) != 0) { tb = lua_touserdata (L, -1); - msg_err ("call to adm lua script failed (%d): %v", ret, tb); + msg_err ("call to rspamadm lua script failed (%d): %v", ret, tb); if (tb) { g_string_free (tb, TRUE); diff --git a/src/rspamadm/rspamadm.h b/src/rspamadm/rspamadm.h index 3c4da9aca6..a778457bc3 100644 --- a/src/rspamadm/rspamadm.h +++ b/src/rspamadm/rspamadm.h @@ -41,6 +41,6 @@ extern struct rspamadm_command help_command; const struct rspamadm_command *rspamadm_search_command (const gchar *name); gboolean rspamadm_execute_lua_ucl_subr (gpointer L, gint argc, gchar **argv, - const ucl_object_t *res, const gchar *script); + const ucl_object_t *res, const gchar *script_name); #endif diff --git a/src/rspamadm/stat_convert.c b/src/rspamadm/stat_convert.c index 48acbc9bd2..98eb337000 100644 --- a/src/rspamadm/stat_convert.c +++ b/src/rspamadm/stat_convert.c @@ -16,7 +16,6 @@ #include "config.h" #include "rspamadm.h" #include "lua/lua_common.h" -#include "stat_convert.lua.h" static gchar *source_db = NULL; static gchar *redis_host = NULL; @@ -117,6 +116,7 @@ rspamadm_statconvert (gint argc, gchar **argv) } L = rspamd_lua_init (); + rspamd_lua_set_path (L, NULL, NULL); obj = ucl_object_typed_new (UCL_OBJECT); ucl_object_insert_key (obj, ucl_object_fromstring (source_db), @@ -147,7 +147,7 @@ rspamadm_statconvert (gint argc, gchar **argv) argc, argv, obj, - rspamadm_script_stat_convert); + "stat_convert"); lua_close (L); ucl_object_unref (obj);