commit 9e8950b: [Rework] Isolate disable/enable logic for the configuration ucl objects
Vsevolod Stakhov
vsevolod at rspamd.com
Wed Mar 30 20:14:03 UTC 2022
Author: Vsevolod Stakhov
Date: 2022-03-30 20:31:21 +0100
URL: https://github.com/rspamd/rspamd/commit/9e8950b9ec82af16706eba796ae315b61d6464c6
[Rework] Isolate disable/enable logic for the configuration ucl objects
---
src/libserver/cfg_file.h | 8 ++++
src/libserver/cfg_utils.c | 110 ++++++++++++++++++++++++++++++----------------
2 files changed, 79 insertions(+), 39 deletions(-)
diff --git a/src/libserver/cfg_file.h b/src/libserver/cfg_file.h
index 61999d547..6f88c6b63 100644
--- a/src/libserver/cfg_file.h
+++ b/src/libserver/cfg_file.h
@@ -718,6 +718,14 @@ gboolean rspamd_config_maybe_disable_action (struct rspamd_config *cfg,
gboolean rspamd_config_is_module_enabled (struct rspamd_config *cfg,
const gchar *module_name);
+/**
+ * Verifies enabled/disabled combination in the specified object
+ * @param obj
+ * @return TRUE if there is no explicit disable in the object found
+ */
+gboolean rspamd_config_is_enabled_from_ucl (struct rspamd_config *cfg,
+ const ucl_object_t *obj);
+
/*
* Get action from a string
*/
diff --git a/src/libserver/cfg_utils.c b/src/libserver/cfg_utils.c
index 3a2797805..49653c22c 100644
--- a/src/libserver/cfg_utils.c
+++ b/src/libserver/cfg_utils.c
@@ -1778,13 +1778,74 @@ rspamd_config_add_symbol_group (struct rspamd_config *cfg,
return FALSE;
}
+gboolean
+rspamd_config_is_enabled_from_ucl (struct rspamd_config *cfg,
+ const ucl_object_t *obj)
+{
+ {
+ const ucl_object_t *enabled;
+
+ enabled = ucl_object_lookup(obj, "enabled");
+
+ if (enabled) {
+ if (ucl_object_type(enabled) == UCL_BOOLEAN) {
+ return ucl_object_toboolean(enabled);
+ }
+ else if (ucl_object_type(enabled) == UCL_STRING) {
+ gchar ret;
+
+ ret = rspamd_config_parse_flag(ucl_object_tostring(enabled), 0);
+
+ if (ret == 0) {
+ return FALSE;
+ }
+ else if (ret == -1) {
+
+ msg_info_config ("wrong value for the `enabled` key");
+ return FALSE;
+ }
+ /* Default return is TRUE here */
+ }
+ }
+ }
+
+ {
+ const ucl_object_t *disabled;
+
+ disabled = ucl_object_lookup(obj, "disabled");
+
+ if (disabled) {
+ if (ucl_object_type(disabled) == UCL_BOOLEAN) {
+ return !ucl_object_toboolean(disabled);
+ }
+ else if (ucl_object_type(disabled) == UCL_STRING) {
+ gchar ret;
+
+ ret = rspamd_config_parse_flag(ucl_object_tostring(disabled), 0);
+
+ if (ret == 0) {
+ return TRUE;
+ }
+ else if (ret == -1) {
+
+ msg_info_config ("wrong value for the `disabled` key");
+ return FALSE;
+ }
+
+ return FALSE;
+ }
+ }
+ }
+
+ return TRUE;
+}
gboolean
rspamd_config_is_module_enabled (struct rspamd_config *cfg,
const gchar *module_name)
{
- gboolean is_c = FALSE;
- const ucl_object_t *conf, *enabled;
+ gboolean is_c = FALSE, enabled;
+ const ucl_object_t *conf;
GList *cur;
struct rspamd_symbols_group *gr;
lua_State *L = cfg->lua_state;
@@ -1843,45 +1904,16 @@ rspamd_config_is_module_enabled (struct rspamd_config *cfg,
}
}
else {
- enabled = ucl_object_lookup (conf, "enabled");
-
- if (enabled) {
- if (ucl_object_type (enabled) == UCL_BOOLEAN) {
- if (!ucl_object_toboolean (enabled)) {
- rspamd_plugins_table_push_elt (L,
- "disabled_explicitly", module_name);
-
- msg_info_config (
- "%s module %s is disabled in the configuration",
- is_c ? "internal" : "lua", module_name);
- return FALSE;
- }
- }
- else if (ucl_object_type (enabled) == UCL_STRING) {
- gint ret;
-
- ret = rspamd_config_parse_flag (ucl_object_tostring (enabled), 0);
-
- if (ret == 0) {
- rspamd_plugins_table_push_elt (L,
- "disabled_explicitly", module_name);
+ enabled = rspamd_config_is_enabled_from_ucl (cfg, conf);
- msg_info_config (
- "%s module %s is disabled in the configuration",
- is_c ? "internal" : "lua", module_name);
- return FALSE;
- }
- else if (ret == -1) {
- rspamd_plugins_table_push_elt (L,
- "disabled_failed", module_name);
+ if (!enabled) {
+ rspamd_plugins_table_push_elt (L,
+ "disabled_explicitly", module_name);
- msg_info_config (
- "%s module %s has wrong enabled flag (%s) in the configuration",
- is_c ? "internal" : "lua", module_name,
- ucl_object_tostring (enabled));
- return FALSE;
- }
- }
+ msg_info_config (
+ "%s module %s is disabled in the configuration",
+ is_c ? "internal" : "lua", module_name);
+ return FALSE;
}
}
More information about the Commits
mailing list