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__)
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <blake2.h>
#include "cfg_rcl.h"
#include "main.h"
#include "uthash_strcase.h"
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));
}
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);
#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__)
}
struct symbols_cache*
-rspamd_symbols_cache_new (void)
+rspamd_symbols_cache_new (struct rspamd_config *cfg)
{
struct symbols_cache *cache;
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;
}
* 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
/**
* 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
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);
}
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;
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)) {
}
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;
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;
}
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");
}
}
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;
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;
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);