]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Rework plugins state to allow future extensions
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 3 Dec 2017 16:49:25 +0000 (16:49 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 3 Dec 2017 16:55:30 +0000 (16:55 +0000)
lualib/lua_util.lua
lualib/rspamadm/configwizard.lua
src/libserver/cfg_utils.c
src/lua/lua_common.c
src/lua/lua_common.h

index b8011e11f018dda063eebba6a00be7cb58bcd633..f7e92937dc56a1ddb9c37de71fb63d883fecce99 100644 (file)
@@ -200,19 +200,16 @@ end
 exports.spairs = spairs
 
 local function disable_module(modname, how)
-  for i,mn in ipairs(rspamd_plugins_state.enabled) do
-    if modname == mn then
-      table.remove(rspamd_plugins_state.enabled, i)
-      break
-    end
+  if rspamd_plugins_state.enabled[modname] then
+    rspamd_plugins_state.enabled[modname] = nil
   end
 
   if how == 'redis' then
-    table.insert(rspamd_plugins_state.disabled_redis, modname)
+    rspamd_plugins_state.disabled_redis[modname] = {}
   elseif how == 'config' then
-    table.insert(rspamd_plugins_state.disabled_unconfigured, modname)
+    rspamd_plugins_state.disabled_unconfigured[modname] = {}
   else
-    table.insert(rspamd_plugins_state.disabled_failed, modname)
+    rspamd_plugins_state.disabled_failed[modname] = {}
   end
 end
 
index 5757e50f35c002c683e58b6a20e3d77706406503..40546e32f28ca258a7e7d36950804c87ae8bd765 100644 (file)
@@ -20,6 +20,8 @@ local rspamd_util = require "rspamd_util"
 local rspamd_logger = require "rspamd_logger"
 local lua_util = require "lua_util"
 
+local plugins_stat = require "rspamadm/plugins_stats"
+
 local function printf(fmt, ...)
   print(string.format(fmt, ...))
 end
@@ -196,6 +198,7 @@ return function(args, cfg)
   printf("Welcome to %s configuration tool", highlight("Rspamd"))
   printf("We use %s configuration file, writing results to %s",
     highlight(cfg.config_path), highlight(local_conf))
+  plugins_stat(nil, nil)
   if ask_yes_no("Do you wish to continue?", true) then
 
     local controller = find_worker(cfg, 'controller')
index 25ef943b9fcedae18924f15ee809c00958ab8ffc..78992f9843444f6da080d7c3d765f47ea0fcf7ad 100644 (file)
@@ -1383,12 +1383,11 @@ rspamd_init_filters (struct rspamd_config *cfg, bool reconfig)
 
        while (cur) {
                /* Perform modules configuring */
-               mod_ctx = NULL;
                mod_ctx = g_hash_table_lookup (cfg->c_modules, cur->data);
 
                if (mod_ctx) {
                        mod = mod_ctx->mod;
-                       mod_ctx->enabled = TRUE;
+                       mod_ctx->enabled = rspamd_config_is_module_enabled (cfg, mod->name);
 
                        if (reconfig) {
                                (void)mod->module_reconfig_func (cfg);
@@ -1530,9 +1529,7 @@ rspamd_config_is_module_enabled (struct rspamd_config *cfg,
 
        if (g_hash_table_lookup (cfg->explicit_modules, module_name) != NULL) {
                /* Always load module */
-               rspamd_table_push_global_elt (L,
-                               rspamd_modules_state_global,
-                               "enabled", module_name);
+               rspamd_plugins_table_push_elt (L, "enabled", module_name);
 
                return TRUE;
        }
@@ -1554,8 +1551,7 @@ rspamd_config_is_module_enabled (struct rspamd_config *cfg,
                if (!found) {
                        msg_info_config ("internal module %s is disable in `filters` line",
                                        module_name);
-                       rspamd_table_push_global_elt (L,
-                                       rspamd_modules_state_global,
+                       rspamd_plugins_table_push_elt (L,
                                        "disabled_explicitly", module_name);
 
                        return FALSE;
@@ -1565,9 +1561,7 @@ rspamd_config_is_module_enabled (struct rspamd_config *cfg,
        conf = ucl_object_lookup (cfg->rcl_obj, module_name);
 
        if (conf == NULL) {
-               rspamd_table_push_global_elt (L,
-                               rspamd_modules_state_global,
-                               "disabled_unconfigured", module_name);
+               rspamd_plugins_table_push_elt (L, "disabled_unconfigured", module_name);
 
                msg_info_config ("%s module %s is enabled but has not been configured",
                                is_c ? "internal" : "lua", module_name);
@@ -1582,8 +1576,7 @@ rspamd_config_is_module_enabled (struct rspamd_config *cfg,
 
                if (enabled && ucl_object_type (enabled) == UCL_BOOLEAN) {
                        if (!ucl_object_toboolean (enabled)) {
-                               rspamd_table_push_global_elt (L,
-                                               rspamd_modules_state_global,
+                               rspamd_plugins_table_push_elt (L,
                                                "disabled_explicitly", module_name);
 
                                msg_info_config ("%s module %s is disabled in the configuration",
@@ -1598,8 +1591,7 @@ rspamd_config_is_module_enabled (struct rspamd_config *cfg,
 
        if (gr) {
                if (gr->disabled) {
-                       rspamd_table_push_global_elt (L,
-                                       rspamd_modules_state_global,
+                       rspamd_plugins_table_push_elt (L,
                                        "disabled_explicitly", module_name);
                        msg_info_config ("%s module %s is disabled in the configuration as "
                                        "its group has been disabled",
@@ -1609,6 +1601,8 @@ rspamd_config_is_module_enabled (struct rspamd_config *cfg,
                }
        }
 
+       rspamd_plugins_table_push_elt (L, "enabled", module_name);
+
        return TRUE;
 }
 
index f6fc36aa698f7ea1defb2f521550a420886c8667..1b4f3e8c7e98720aab2fc2e5feb2b628f9882a52 100644 (file)
@@ -49,6 +49,8 @@ const luaL_reg worker_reg[] = {
        {NULL, NULL}
 };
 
+static const char rspamd_modules_state_global[] = "rspamd_plugins_state";
+
 static GQuark
 lua_error_quark (void)
 {
@@ -467,18 +469,17 @@ rspamd_free_lua_locked (struct lua_locked_state *st)
        g_free (st);
 }
 
+
 void
-rspamd_table_push_global_elt (lua_State *L, const gchar *global_name,
-               const gchar *field_name, const gchar *new_elt)
+rspamd_plugins_table_push_elt (lua_State *L, const gchar *field_name,
+               const gchar *new_elt)
 {
-       gsize last;
-
-       lua_getglobal (L, global_name);
+       lua_getglobal (L, rspamd_modules_state_global);
        lua_pushstring (L, field_name);
        lua_gettable (L, -2);
-       last = lua_rawlen (L, -1);
        lua_pushstring (L, new_elt);
-       lua_rawseti (L, -2, last + 1);
+       lua_newtable (L);
+       lua_settable (L, -3);
        lua_pop (L, 2); /* Global + element */
 }
 
@@ -513,8 +514,8 @@ rspamd_init_lua_filters (struct rspamd_config *cfg, gboolean force_load)
                                        lua_tostring (L, -1));
                                lua_pop (L, 1); /*  Error function */
 
-                               rspamd_table_push_global_elt (L, rspamd_modules_state_global,
-                                               "disabled_failed", module->name);
+                               rspamd_plugins_table_push_elt (L, "disabled_failed",
+                                               module->name);
 
                                cur = g_list_next (cur);
                                continue;
@@ -535,8 +536,8 @@ rspamd_init_lua_filters (struct rspamd_config *cfg, gboolean force_load)
                                g_string_free (tb, TRUE);
                                lua_pop (L, 2); /* Result and error function */
 
-                               rspamd_table_push_global_elt (L, rspamd_modules_state_global,
-                                               "disabled_failed", module->name);
+                               rspamd_plugins_table_push_elt (L, "disabled_failed",
+                                               module->name);
 
                                cur = g_list_next (cur);
                                continue;
index 1bc1e0bdf37f1566eb02ca43bc572fccbe8b8144..1cbbd9bd28e154421f0cf3271d6e837a107e2a64 100644 (file)
@@ -48,7 +48,6 @@ luaL_register (lua_State *L, const gchar *name, const struct luaL_reg *methods)
 #define LUA_INTERFACE_DEF(class, name) { # name, lua_ ## class ## _ ## name }
 
 extern const luaL_reg null_reg[];
-static const char rspamd_modules_state_global[] = "rspamd_plugins_state";
 
 #define RSPAMD_LUA_API_VERSION 12
 
@@ -169,8 +168,8 @@ lua_State *rspamd_lua_init (void);
  * @param new_elt
  */
 void
-rspamd_table_push_global_elt (lua_State *L, const gchar *global_name,
-               const gchar *field_name, const gchar *new_elt);
+rspamd_plugins_table_push_elt (lua_State *L, const gchar *field_name,
+               const gchar *new_elt);
 /**
  * Load and initialize lua plugins
  */