commit 890e7fe: [Feature] Check for plugin configuration errors on `configtest`

Vsevolod Stakhov vsevolod at rspamd.com
Mon Aug 7 12:35:07 UTC 2023


Author: Vsevolod Stakhov
Date: 2023-08-07 13:32:48 +0100
URL: https://github.com/rspamd/rspamd/commit/890e7fe0e079b946c34986f5c65fbd05626486d0 (HEAD -> master)

[Feature] Check for plugin configuration errors on `configtest`

---
 lualib/lua_cfg_utils.lua  | 17 +++++++++++++++++
 src/rspamadm/configtest.c | 23 ++++++++++++++++++++---
 2 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/lualib/lua_cfg_utils.lua b/lualib/lua_cfg_utils.lua
index 141b497bc..e07a3ae05 100644
--- a/lualib/lua_cfg_utils.lua
+++ b/lualib/lua_cfg_utils.lua
@@ -19,6 +19,7 @@ limitations under the License.
 -- This module contains utility functions for configuration of Rspamd modules
 --]]
 
+local rspamd_logger = require "rspamd_logger"
 local exports = {}
 
 --[[[
@@ -64,4 +65,20 @@ exports.push_config_error = function(module, err)
   table.insert(rspamd_plugins_state.config_errors[module], err)
 end
 
+exports.check_configuration_errors = function()
+  local ret = true
+
+  if type(rspamd_plugins_state.config_errors) == 'table' then
+    -- We have some errors found during the configuration, so we need to show them
+    for m, errs in pairs(rspamd_plugins_state.config_errors) do
+      for _, err in ipairs(errs) do
+        rspamd_logger.errx(rspamd_config, 'configuration error: module %s: %s', m, err)
+        ret = false
+      end
+    end
+  end
+
+  return ret
+end
+
 return exports
\ No newline at end of file
diff --git a/src/rspamadm/configtest.c b/src/rspamadm/configtest.c
index bfad1984e..8f1482fc1 100644
--- a/src/rspamadm/configtest.c
+++ b/src/rspamadm/configtest.c
@@ -1,11 +1,11 @@
-/*-
- * Copyright 2016 Vsevolod Stakhov
+/*
+ * Copyright 2023 Vsevolod Stakhov
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *   http://www.apache.org/licenses/LICENSE-2.0
+ *    http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
@@ -150,6 +150,23 @@ rspamadm_configtest(gint argc, gchar **argv, const struct rspamadm_command *cmd)
 											 FALSE)) {
 			ret = FALSE;
 		}
+
+		if (ret) {
+			if (rspamd_lua_require_function(cfg->lua_state, "lua_cfg_utils", "check_configuration_errors")) {
+				GError *err = NULL;
+
+				if (!rspamd_lua_universal_pcall(cfg->lua_state, -1, G_STRLOC, 1, "", &err)) {
+					msg_err_config("call to lua function failed: %s",
+								   lua_tostring(cfg->lua_state, -1));
+					lua_pop(cfg->lua_state, 2);
+					ret = FALSE;
+				}
+				else {
+					ret = lua_toboolean(cfg->lua_state, -1);
+					lua_pop(cfg->lua_state, 2);
+				}
+			}
+		}
 	}
 
 	if (strict && ret) {


More information about the Commits mailing list