From ac2d3dfba0a971bd0f73724f99a318fc1f371b5c Mon Sep 17 00:00:00 2001
From: Vsevolod Stakhov <vsevolod@highsecure.ru>
Date: Fri, 28 Aug 2015 17:06:48 +0100
Subject: 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 ++---
 4 files changed, 23 insertions(+), 17 deletions(-)

(limited to 'src/libserver')

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 <blake2.h>
 #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
-- 
cgit v1.2.3