summaryrefslogtreecommitdiffstats
path: root/src/libserver/cfg_rcl.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-06-25 12:36:07 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-06-25 12:36:07 +0100
commit48a666c5ca646ff12ce68cc763edb82485fa7c6a (patch)
tree794d567d2c20d666bd1e9483a8d3ee1095ef4cc4 /src/libserver/cfg_rcl.c
parent413e08bb4f8dd7e85e5bc86b15751d1789553fe3 (diff)
downloadrspamd-48a666c5ca646ff12ce68cc763edb82485fa7c6a.tar.gz
rspamd-48a666c5ca646ff12ce68cc763edb82485fa7c6a.zip
[Rework] Include config structure to all rcl handlers
Diffstat (limited to 'src/libserver/cfg_rcl.c')
-rw-r--r--src/libserver/cfg_rcl.c59
1 files changed, 34 insertions, 25 deletions
diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c
index 7b7c76420..4f8d3cb36 100644
--- a/src/libserver/cfg_rcl.c
+++ b/src/libserver/cfg_rcl.c
@@ -79,7 +79,8 @@ struct rspamd_worker_cfg_parser {
gpointer def_ud;
};
-static gboolean rspamd_rcl_process_section (struct rspamd_rcl_section *sec,
+static gboolean rspamd_rcl_process_section (struct rspamd_config *cfg,
+ struct rspamd_rcl_section *sec,
gpointer ptr, const ucl_object_t *obj, rspamd_mempool_t *pool,
GError **err);
@@ -225,7 +226,7 @@ rspamd_rcl_logging_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
}
}
- return rspamd_rcl_section_parse_defaults (section, cfg->cfg_pool, obj,
+ return rspamd_rcl_section_parse_defaults (cfg, section, cfg->cfg_pool, obj,
cfg, err);
}
@@ -242,7 +243,8 @@ rspamd_rcl_options_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
dns = ucl_object_lookup (obj, "dns");
if (dns_section != NULL && dns != NULL) {
- if (!rspamd_rcl_section_parse_defaults (dns_section, cfg->cfg_pool, dns,
+ if (!rspamd_rcl_section_parse_defaults (cfg,
+ dns_section, cfg->cfg_pool, dns,
cfg, err)) {
return FALSE;
}
@@ -252,13 +254,15 @@ rspamd_rcl_options_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
upstream = ucl_object_lookup (obj, "upstream");
if (upstream_section != NULL && upstream != NULL) {
- if (!rspamd_rcl_section_parse_defaults (upstream_section, cfg->cfg_pool,
- upstream, cfg, err)) {
+ if (!rspamd_rcl_section_parse_defaults (cfg,
+ upstream_section, cfg->cfg_pool,
+ upstream, cfg, err)) {
return FALSE;
}
}
- if (rspamd_rcl_section_parse_defaults (section, cfg->cfg_pool, obj,
+ if (rspamd_rcl_section_parse_defaults (cfg,
+ section, cfg->cfg_pool, obj,
cfg, err)) {
/* We need to init this early */
rspamd_multipattern_library_init (cfg->hs_cache_dir);
@@ -296,7 +300,7 @@ rspamd_rcl_group_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
gr = rspamd_config_new_group (sd->cfg, metric, key);
}
- if (!rspamd_rcl_section_parse_defaults (section, pool, obj,
+ if (!rspamd_rcl_section_parse_defaults (sd->cfg, section, pool, obj,
gr, err)) {
return FALSE;
}
@@ -310,7 +314,7 @@ rspamd_rcl_group_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
g_assert (subsection != NULL);
LL_FOREACH (val, cur) {
- if (!rspamd_rcl_process_section (subsection, sd, cur,
+ if (!rspamd_rcl_process_section (sd->cfg, subsection, sd, cur,
pool, err)) {
return FALSE;
}
@@ -442,7 +446,7 @@ rspamd_rcl_metric_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
metric = rspamd_config_new_metric (cfg, metric, key);
}
- if (!rspamd_rcl_section_parse_defaults (section, cfg->cfg_pool, obj,
+ if (!rspamd_rcl_section_parse_defaults (cfg, section, cfg->cfg_pool, obj,
metric, err)) {
return FALSE;
}
@@ -465,7 +469,7 @@ rspamd_rcl_metric_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
acts_cbdata.cfg = cfg;
acts_cbdata.metric = metric;
- if (!rspamd_rcl_process_section (subsection, &acts_cbdata, val,
+ if (!rspamd_rcl_process_section (cfg, subsection, &acts_cbdata, val,
cfg->cfg_pool, err)) {
return FALSE;
}
@@ -483,7 +487,7 @@ rspamd_rcl_metric_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
sd.metric = metric;
LL_FOREACH (val, cur) {
- if (!rspamd_rcl_process_section (subsection, &sd, cur,
+ if (!rspamd_rcl_process_section (cfg, subsection, &sd, cur,
cfg->cfg_pool, err)) {
return FALSE;
}
@@ -500,7 +504,7 @@ rspamd_rcl_metric_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
sd.metric = metric;
LL_FOREACH (val, cur) {
- if (!rspamd_rcl_process_section (subsection, &sd, cur,
+ if (!rspamd_rcl_process_section (cfg, subsection, &sd, cur,
cfg->cfg_pool, err)) {
return FALSE;
}
@@ -642,7 +646,7 @@ rspamd_rcl_worker_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
wrk->options = (ucl_object_t *)obj;
- if (!rspamd_rcl_section_parse_defaults (section, cfg->cfg_pool, obj,
+ if (!rspamd_rcl_section_parse_defaults (cfg, section, cfg->cfg_pool, obj,
wrk, err)) {
return FALSE;
}
@@ -1162,7 +1166,7 @@ rspamd_rcl_statfile_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
st = rspamd_config_new_statfile (cfg, NULL);
st->symbol = rspamd_mempool_strdup (cfg->cfg_pool, key);
- if (rspamd_rcl_section_parse_defaults (section, pool, obj, st, err)) {
+ if (rspamd_rcl_section_parse_defaults (cfg, section, pool, obj, st, err)) {
ccf->statfiles = g_list_prepend (ccf->statfiles, st);
if (st->label != NULL) {
labels = g_hash_table_lookup (ccf->labels, st->label);
@@ -1244,7 +1248,7 @@ rspamd_rcl_classifier_handler (rspamd_mempool_t *pool,
ccf->classifier = rspamd_mempool_strdup (cfg->cfg_pool, key);
- if (rspamd_rcl_section_parse_defaults (section, cfg->cfg_pool, obj,
+ if (rspamd_rcl_section_parse_defaults (cfg, section, cfg->cfg_pool, obj,
ccf, err)) {
HASH_FIND_STR (section->subsections, "statfile", stat_section);
@@ -1264,7 +1268,7 @@ rspamd_rcl_classifier_handler (rspamd_mempool_t *pool,
LL_FOREACH (val, cur) {
stud.cfg = cfg;
stud.ccf = ccf;
- res = rspamd_rcl_process_section (stat_section, &stud,
+ res = rspamd_rcl_process_section (cfg, stat_section, &stud,
cur, cfg->cfg_pool, err);
if (!res) {
@@ -2267,7 +2271,8 @@ rspamd_rcl_config_get_section (struct rspamd_rcl_section *top,
}
static gboolean
-rspamd_rcl_process_section (struct rspamd_rcl_section *sec,
+rspamd_rcl_process_section (struct rspamd_config *cfg,
+ struct rspamd_rcl_section *sec,
gpointer ptr, const ucl_object_t *obj, rspamd_mempool_t *pool,
GError **err)
{
@@ -2341,6 +2346,7 @@ rspamd_rcl_process_section (struct rspamd_rcl_section *sec,
gboolean
rspamd_rcl_parse (struct rspamd_rcl_section *top,
+ struct rspamd_config *cfg,
gpointer ptr, rspamd_mempool_t *pool,
const ucl_object_t *obj, GError **err)
{
@@ -2365,13 +2371,14 @@ rspamd_rcl_parse (struct rspamd_rcl_section *top,
if (found_sec == NULL) {
if (cur->handler != NULL) {
- if (!rspamd_rcl_process_section (cur, ptr, cur_obj,
+ if (!rspamd_rcl_process_section (cfg, cur, ptr, cur_obj,
pool, err)) {
return FALSE;
}
}
else {
- rspamd_rcl_section_parse_defaults (cur,
+ rspamd_rcl_section_parse_defaults (cfg,
+ cur,
pool,
cur_obj,
ptr,
@@ -2401,13 +2408,13 @@ rspamd_rcl_parse (struct rspamd_rcl_section *top,
LL_FOREACH (found, cur_obj) {
if (cur->handler != NULL) {
- if (!rspamd_rcl_process_section (cur, ptr, cur_obj,
+ if (!rspamd_rcl_process_section (cfg, cur, ptr, cur_obj,
pool, err)) {
return FALSE;
}
}
else {
- rspamd_rcl_section_parse_defaults (cur,
+ rspamd_rcl_section_parse_defaults (cfg, cur,
pool,
cur_obj,
ptr,
@@ -2425,9 +2432,10 @@ rspamd_rcl_parse (struct rspamd_rcl_section *top,
}
gboolean
-rspamd_rcl_section_parse_defaults (struct rspamd_rcl_section *section,
- rspamd_mempool_t *pool, const ucl_object_t *obj, gpointer ptr,
- GError **err)
+rspamd_rcl_section_parse_defaults (struct rspamd_config *cfg,
+ struct rspamd_rcl_section *section,
+ rspamd_mempool_t *pool, const ucl_object_t *obj, gpointer ptr,
+ GError **err)
{
const ucl_object_t *found, *cur_obj;
struct rspamd_rcl_default_handler_data *cur, *tmp;
@@ -2445,6 +2453,7 @@ rspamd_rcl_section_parse_defaults (struct rspamd_rcl_section *section,
found = ucl_object_lookup (obj, cur->key);
if (found != NULL) {
cur->pd.user_struct = ptr;
+ cur->pd.cfg = cfg;
LL_FOREACH (found, cur_obj) {
if (!cur->handler (pool, cur_obj, &cur->pd, section, err)) {
@@ -3221,7 +3230,7 @@ rspamd_config_read (struct rspamd_config *cfg, const gchar *filename,
}
}
- if (!rspamd_rcl_parse (top, cfg, cfg->cfg_pool, cfg->rcl_obj, &err)) {
+ if (!rspamd_rcl_parse (top, cfg, cfg, cfg->cfg_pool, cfg->rcl_obj, &err)) {
msg_err_config ("rcl parse error: %e", err);
g_error_free (err);
return FALSE;