*/
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
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)
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;
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));
#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);
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
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);
}