From 4a455a7b342a19bf45adc4fabc1b156fe7107c09 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Sat, 2 Jan 2016 19:04:02 +0000 Subject: [PATCH] Allow NULL path to add top level documentation strings --- src/libserver/cfg_rcl.c | 53 +++++++++++++++++++++++++---------------- src/plugins/surbl.c | 3 +++ 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c index a493e9c32..ff349e75e 100644 --- a/src/libserver/cfg_rcl.c +++ b/src/libserver/cfg_rcl.c @@ -3077,33 +3077,44 @@ rspamd_rcl_add_doc_by_path (struct rspamd_config *cfg, ucl_object_t *obj; gchar **path_components, **comp; - found = ucl_lookup_path (cfg->doc_strings, doc_path); - - if (found != NULL) { - return rspamd_rcl_add_doc_obj ((ucl_object_t *)found, + if (doc_path == NULL) { + /* Assume top object */ + return rspamd_rcl_add_doc_obj (cfg->doc_strings, doc_string, doc_name, type, handler, flags); } + else { + found = ucl_lookup_path (cfg->doc_strings, doc_path); - /* Otherwise we need to insert all components of the path */ - path_components = g_strsplit_set (doc_path, ".", -1); - cur = cfg->doc_strings; - - for (comp = path_components; *comp != NULL; comp ++) { - if (ucl_object_type (cur) != UCL_OBJECT) { - msg_err_config ("Bad path while lookup for '%s' at %s", - doc_path, *comp); - return NULL; + if (found != NULL) { + return rspamd_rcl_add_doc_obj ((ucl_object_t *) found, + doc_string, doc_name, type, handler, flags); } - found = ucl_object_find_key (cur, *comp); + /* Otherwise we need to insert all components of the path */ + path_components = g_strsplit_set (doc_path, ".", -1); + cur = cfg->doc_strings; - if (found == NULL) { - obj = ucl_object_typed_new (UCL_OBJECT); - ucl_object_insert_key ((ucl_object_t *)cur, obj, *comp, 0, true); - cur = obj; - } - else { - cur = found; + for (comp = path_components; *comp != NULL; comp++) { + if (ucl_object_type (cur) != UCL_OBJECT) { + msg_err_config ("Bad path while lookup for '%s' at %s", + doc_path, *comp); + return NULL; + } + + found = ucl_object_find_key (cur, *comp); + + if (found == NULL) { + obj = ucl_object_typed_new (UCL_OBJECT); + ucl_object_insert_key ((ucl_object_t *) cur, + obj, + *comp, + 0, + true); + cur = obj; + } + else { + cur = found; + } } } diff --git a/src/plugins/surbl.c b/src/plugins/surbl.c index b83aad138..baa125422 100644 --- a/src/plugins/surbl.c +++ b/src/plugins/surbl.c @@ -292,6 +292,9 @@ surbl_module_init (struct rspamd_config *cfg, struct module_ctx **ctx) *ctx = (struct module_ctx *)surbl_module_ctx; + rspamd_rcl_add_doc_by_path (cfg, NULL, + "URL blacklist plugin", + "surbl", UCL_OBJECT, NULL, 0); rspamd_rcl_add_doc_by_path (cfg, "surbl", "List of redirector servers", "redirector", UCL_STRING, NULL, 0); -- 2.39.5