From ac2d3dfba0a971bd0f73724f99a318fc1f371b5c Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Fri, 28 Aug 2015 17:06:48 +0100 Subject: [PATCH] Use config checksum for unique tag. --- src/libserver/cfg_file.h | 8 ++++---- src/libserver/cfg_rcl.c | 7 +++++++ src/libserver/symbols_cache.c | 20 ++++++++++---------- src/libserver/symbols_cache.h | 5 ++--- src/lua/lua_util.c | 8 ++++---- src/main.c | 10 +++++----- 6 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src/libserver/cfg_file.h b/src/libserver/cfg_file.h index a889987fa..3a1e01bfb 100644 --- a/src/libserver/cfg_file.h +++ b/src/libserver/cfg_file.h @@ -449,19 +449,19 @@ gboolean rspamd_config_is_module_enabled (struct rspamd_config *cfg, const gchar *module_name); #define msg_err_config(...) rspamd_default_log_function (G_LOG_LEVEL_CRITICAL, \ - cfg->cfg_pool->tag.tagname, cfg->cfg_pool->tag.uid, \ + cfg->cfg_pool->tag.tagname, cfg->checksum, \ G_STRFUNC, \ __VA_ARGS__) #define msg_warn_config(...) rspamd_default_log_function (G_LOG_LEVEL_WARNING, \ - cfg->cfg_pool->tag.tagname, cfg->cfg_pool->tag.uid, \ + cfg->cfg_pool->tag.tagname, cfg->checksum, \ G_STRFUNC, \ __VA_ARGS__) #define msg_info_config(...) rspamd_default_log_function (G_LOG_LEVEL_INFO, \ - cfg->cfg_pool->tag.tagname, cfg->cfg_pool->tag.uid, \ + cfg->cfg_pool->tag.tagname, cfg->checksum, \ G_STRFUNC, \ __VA_ARGS__) #define msg_debug_config(...) rspamd_default_log_function (G_LOG_LEVEL_DEBUG, \ - cfg->cfg_pool->tag.tagname, cfg->cfg_pool->tag.uid, \ + cfg->cfg_pool->tag.tagname, cfg->checksum, \ G_STRFUNC, \ __VA_ARGS__) diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c index be0243dc2..cddf044a9 100644 --- a/src/libserver/cfg_rcl.c +++ b/src/libserver/cfg_rcl.c @@ -21,6 +21,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include "cfg_rcl.h" #include "main.h" #include "uthash_strcase.h" @@ -2386,6 +2387,7 @@ rspamd_config_read (struct rspamd_config *cfg, const gchar *filename, GError *err = NULL; struct rspamd_rcl_section *top, *logger; struct ucl_parser *parser; + unsigned char cksumbuf[BLAKE2B_OUTBYTES]; if (stat (filename, &st) == -1) { msg_err_config ("cannot stat %s: %s", filename, strerror (errno)); @@ -2405,15 +2407,20 @@ rspamd_config_read (struct rspamd_config *cfg, const gchar *filename, } close (fd); + blake2b (cksumbuf, data, NULL, sizeof (cksumbuf), st.st_size, 0); + cfg->checksum = rspamd_encode_base32 (cksumbuf, sizeof (cksumbuf)); + parser = ucl_parser_new (0); rspamd_ucl_add_conf_variables (parser, vars); rspamd_ucl_add_conf_macros (parser, cfg); + if (!ucl_parser_add_chunk (parser, data, st.st_size)) { msg_err_config ("ucl parser error: %s", ucl_parser_get_error (parser)); ucl_parser_free (parser); munmap (data, st.st_size); return FALSE; } + munmap (data, st.st_size); cfg->rcl_obj = ucl_parser_get_object (parser); ucl_parser_free (parser); diff --git a/src/libserver/symbols_cache.c b/src/libserver/symbols_cache.c index aef6b9cd0..5cfa4cff3 100644 --- a/src/libserver/symbols_cache.c +++ b/src/libserver/symbols_cache.c @@ -31,19 +31,19 @@ #include "lua/lua_common.h" #define msg_err_cache(...) rspamd_default_log_function (G_LOG_LEVEL_CRITICAL, \ - cache->static_pool->tag.tagname, cache->static_pool->tag.uid, \ + cache->static_pool->tag.tagname, cache->cfg->checksum, \ G_STRFUNC, \ __VA_ARGS__) #define msg_warn_cache(...) rspamd_default_log_function (G_LOG_LEVEL_WARNING, \ - cache->static_pool->tag.tagname, cache->static_pool->tag.uid, \ + cache->static_pool->tag.tagname, cache->cfg->checksum, \ G_STRFUNC, \ __VA_ARGS__) #define msg_info_cache(...) rspamd_default_log_function (G_LOG_LEVEL_INFO, \ - cache->static_pool->tag.tagname, cache->static_pool->tag.uid, \ + cache->static_pool->tag.tagname, cache->cfg->checksum, \ G_STRFUNC, \ __VA_ARGS__) #define msg_debug_cache(...) rspamd_default_log_function (G_LOG_LEVEL_DEBUG, \ - cache->static_pool->tag.tagname, cache->static_pool->tag.uid, \ + cache->static_pool->tag.tagname, cache->cfg->checksum, \ G_STRFUNC, \ __VA_ARGS__) @@ -605,7 +605,7 @@ rspamd_symbols_cache_destroy (struct symbols_cache *cache) } struct symbols_cache* -rspamd_symbols_cache_new (void) +rspamd_symbols_cache_new (struct rspamd_config *cfg) { struct symbols_cache *cache; @@ -620,27 +620,27 @@ rspamd_symbols_cache_new (void) cache->reload_time = CACHE_RELOAD_TIME; cache->total_freq = 1; cache->max_weight = 1.0; + cache->cfg = cfg; return cache; } gboolean -rspamd_symbols_cache_init (struct symbols_cache* cache, - struct rspamd_config *cfg) +rspamd_symbols_cache_init (struct symbols_cache* cache) { gboolean res; g_assert (cache != NULL); - cache->cfg = cfg; + /* Just in-memory cache */ - if (cfg->cache_filename == NULL) { + if (cache->cfg->cache_filename == NULL) { post_cache_init (cache); return TRUE; } /* Copy saved cache entries */ - res = rspamd_symbols_cache_load_items (cache, cfg->cache_filename); + res = rspamd_symbols_cache_load_items (cache, cache->cfg->cache_filename); return res; } diff --git a/src/libserver/symbols_cache.h b/src/libserver/symbols_cache.h index 2f4e28657..64d1f911f 100644 --- a/src/libserver/symbols_cache.h +++ b/src/libserver/symbols_cache.h @@ -50,7 +50,7 @@ enum rspamd_symbol_type { * Creates new cache structure * @return */ -struct symbols_cache* rspamd_symbols_cache_new (void); +struct symbols_cache* rspamd_symbols_cache_new (struct rspamd_config *cfg); /** * Remove the cache structure syncing data if needed @@ -61,8 +61,7 @@ void rspamd_symbols_cache_destroy (struct symbols_cache *cache); /** * Load symbols cache from file, must be called _after_ init_symbols_cache */ -gboolean rspamd_symbols_cache_init (struct symbols_cache* cache, - struct rspamd_config *cfg); +gboolean rspamd_symbols_cache_init (struct symbols_cache* cache); /** * Generic function to register a symbol diff --git a/src/lua/lua_util.c b/src/lua/lua_util.c index 260ec7b30..4655399b4 100644 --- a/src/lua/lua_util.c +++ b/src/lua/lua_util.c @@ -151,7 +151,7 @@ lua_util_load_rspamd_config (lua_State *L) if (cfg_name) { cfg = g_malloc0 (sizeof (struct rspamd_config)); rspamd_init_cfg (cfg, FALSE); - cfg->cache = rspamd_symbols_cache_new (); + cfg->cache = rspamd_symbols_cache_new (cfg); if (rspamd_config_read (cfg, cfg_name, NULL, NULL, NULL, NULL)) { msg_err ("cannot load config from %s", cfg_name); @@ -159,7 +159,7 @@ lua_util_load_rspamd_config (lua_State *L) } else { rspamd_config_post_load (cfg); - rspamd_symbols_cache_init (cfg->cache, cfg); + rspamd_symbols_cache_init (cfg->cache); pcfg = lua_newuserdata (L, sizeof (struct rspamd_config *)); rspamd_lua_setclass (L, "rspamd{config}", -1); *pcfg = cfg; @@ -184,7 +184,7 @@ lua_util_config_from_ucl (lua_State *L) rspamd_init_cfg (cfg, FALSE); cfg->lua_state = L; cfg->rcl_obj = obj; - cfg->cache = rspamd_symbols_cache_new (); + cfg->cache = rspamd_symbols_cache_new (cfg); top = rspamd_rcl_config_init (); if (!rspamd_rcl_parse (top, cfg, cfg->cfg_pool, cfg->rcl_obj, &err)) { @@ -194,7 +194,7 @@ lua_util_config_from_ucl (lua_State *L) } else { rspamd_config_post_load (cfg); - rspamd_symbols_cache_init (cfg->cache, cfg); + rspamd_symbols_cache_init (cfg->cache); pcfg = lua_newuserdata (L, sizeof (struct rspamd_config *)); rspamd_lua_setclass (L, "rspamd{config}", -1); *pcfg = cfg; diff --git a/src/main.c b/src/main.c index 93bc5d06a..8191982b5 100644 --- a/src/main.c +++ b/src/main.c @@ -392,7 +392,7 @@ reread_config (struct rspamd_main *rspamd) rspamd_init_cfg (tmp_cfg, TRUE); cfg_file = rspamd_mempool_strdup (tmp_cfg->cfg_pool, rspamd->cfg->cfg_name); - tmp_cfg->cache = rspamd_symbols_cache_new (); + tmp_cfg->cache = rspamd_symbols_cache_new (tmp_cfg); /* Save some variables */ tmp_cfg->cfg_name = cfg_file; @@ -416,7 +416,7 @@ reread_config (struct rspamd_main *rspamd) } rspamd_init_filters (rspamd->cfg, TRUE); - rspamd_symbols_cache_init (rspamd->cfg->cache, rspamd->cfg); + rspamd_symbols_cache_init (rspamd->cfg->cache); msg_info_main ("config has been reread successfully"); } } @@ -790,7 +790,7 @@ reopen_log_handler (gpointer key, gpointer value, gpointer unused) static gboolean load_rspamd_config (struct rspamd_config *cfg, gboolean init_modules) { - cfg->cache = rspamd_symbols_cache_new (); + cfg->cache = rspamd_symbols_cache_new (cfg); cfg->compiled_modules = modules; cfg->compiled_workers = workers; @@ -1179,7 +1179,7 @@ main (gint argc, gchar **argv, gchar **env) res = TRUE; - rspamd_symbols_cache_init (rspamd_main->cfg->cache, rspamd_main->cfg); + rspamd_symbols_cache_init (rspamd_main->cfg->cache); if (!rspamd_init_filters (rspamd_main->cfg, FALSE)) { res = FALSE; @@ -1247,7 +1247,7 @@ main (gint argc, gchar **argv, gchar **env) setproctitle ("main process"); /* Init config cache */ - rspamd_symbols_cache_init (rspamd_main->cfg->cache, rspamd_main->cfg); + rspamd_symbols_cache_init (rspamd_main->cfg->cache); /* Validate cache */ (void)rspamd_symbols_cache_validate (rspamd_main->cfg->cache, rspamd_main->cfg, FALSE); -- 2.39.5