]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Add support for extra variables in a config.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 6 Jul 2015 19:19:59 +0000 (20:19 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 6 Jul 2015 19:19:59 +0000 (20:19 +0100)
src/libserver/cfg_file.h
src/libserver/cfg_rcl.c
src/libserver/cfg_utils.c
src/lua/lua_util.c

index c6087b157753ae91d1e66ec5ef0dc1aac8766db5..da7c3088bfb530f1c64777841634da2bd5460bf4 100644 (file)
@@ -363,7 +363,8 @@ struct rspamd_statfile_config * rspamd_config_new_statfile (
  */
 gboolean rspamd_config_read (struct rspamd_config *cfg,
        const gchar *filename, const gchar *convert_to,
-       rspamd_rcl_section_fin_t logger_fin, gpointer logger_ud);
+       rspamd_rcl_section_fin_t logger_fin, gpointer logger_ud,
+       GHashTable *vars);
 
 /*
  * Register symbols of classifiers inside metrics
@@ -385,7 +386,7 @@ struct rspamd_classifier_config * rspamd_config_find_classifier (
 void rspamd_ucl_add_conf_macros (struct ucl_parser *parser,
        struct rspamd_config *cfg);
 
-void rspamd_ucl_add_conf_variables (struct ucl_parser *parser);
+void rspamd_ucl_add_conf_variables (struct ucl_parser *parser, GHashTable *vars);
 
 /**
  * Initialize rspamd filtering system (lua and C filters)
index fc8ada74966cbbd4df1156a644cb3f2148b5b683..26b47442aff33b303bf9e6680f309cf168968da5 100644 (file)
@@ -2254,7 +2254,7 @@ rspamd_rcl_register_worker_parser (struct rspamd_config *cfg, gint type,
 gboolean
 rspamd_config_read (struct rspamd_config *cfg, const gchar *filename,
        const gchar *convert_to, rspamd_rcl_section_fin_t logger_fin,
-       gpointer logger_ud)
+       gpointer logger_ud, GHashTable *vars)
 {
        struct stat st;
        gint fd;
@@ -2282,7 +2282,7 @@ rspamd_config_read (struct rspamd_config *cfg, const gchar *filename,
        close (fd);
 
        parser = ucl_parser_new (0);
-       rspamd_ucl_add_conf_variables (parser);
+       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 ("ucl parser error: %s", ucl_parser_get_error (parser));
index 24edc45b5702796097369354d4ef4991b94211d6..1ba6b2555e2d5eb25aafe4f0f2a1ec5de82cf9a8 100644 (file)
@@ -644,8 +644,11 @@ rspamd_include_map_handler (const guchar *data, gsize len,
 #define RSPAMD_VERSION_MACRO "VERSION"
 
 void
-rspamd_ucl_add_conf_variables (struct ucl_parser *parser)
+rspamd_ucl_add_conf_variables (struct ucl_parser *parser, GHashTable *vars)
 {
+       GHashTableIter it;
+       gpointer k, v;
+
        ucl_parser_register_variable (parser,
                                                                                 RSPAMD_CONFDIR_MACRO,
                                                                                                                                RSPAMD_CONFDIR);
@@ -663,6 +666,14 @@ rspamd_ucl_add_conf_variables (struct ucl_parser *parser)
        ucl_parser_register_variable (parser,  RSPAMD_PREFIX_MACRO,
                                                                                                                                RSPAMD_PREFIX);
        ucl_parser_register_variable (parser, RSPAMD_VERSION_MACRO, RVERSION);
+
+       if (vars != NULL) {
+               g_hash_table_iter_init (&it, vars);
+
+               while (g_hash_table_iter_next (&it, &k, &v)) {
+                       ucl_parser_register_variable (parser, k, v);
+               }
+       }
 }
 
 void
index 3e6b34c810b63c60483c200e4c78eec2d9dbe0e0..9a670da04a020152b07a2983f9eb9b6225f37d9f 100644 (file)
@@ -106,7 +106,7 @@ lua_util_load_rspamd_config (lua_State *L)
                rspamd_init_cfg (cfg, FALSE);
                cfg->cache = rspamd_symbols_cache_new ();
 
-               if (rspamd_config_read (cfg, cfg_name, NULL, NULL, NULL)) {
+               if (rspamd_config_read (cfg, cfg_name, NULL, NULL, NULL, NULL)) {
                        msg_err ("cannot load config from %s", cfg_name);
                        lua_pushnil (L);
                }