aboutsummaryrefslogtreecommitdiffstats
path: root/src/cfg_rcl.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2013-11-09 22:36:18 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2013-11-09 22:36:18 +0000
commitb0684dcde39eac33709c16ee27db197a1dfa5724 (patch)
tree6df26af33b598d21bab8e95957b5dfafc5e89419 /src/cfg_rcl.c
parentb12ed1722e350bd55a13e34f2eb6f8d41134581d (diff)
downloadrspamd-b0684dcde39eac33709c16ee27db197a1dfa5724.tar.gz
rspamd-b0684dcde39eac33709c16ee27db197a1dfa5724.zip
Unbreak lua_worker with ucl.
Diffstat (limited to 'src/cfg_rcl.c')
-rw-r--r--src/cfg_rcl.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/cfg_rcl.c b/src/cfg_rcl.c
index 41a1cd8c8..3f419ceb8 100644
--- a/src/cfg_rcl.c
+++ b/src/cfg_rcl.c
@@ -507,6 +507,11 @@ rspamd_rcl_worker_handler (struct config_file *cfg, ucl_object_t *obj,
}
}
}
+ if (wparser->def_obj_parser != NULL) {
+ if (! wparser->def_obj_parser (obj, wparser->def_ud)) {
+ return FALSE;
+ }
+ }
}
cfg->workers = g_list_prepend (cfg->workers, wrk);
@@ -1393,3 +1398,21 @@ rspamd_rcl_register_worker_option (struct config_file *cfg, gint type, const gch
nhandler->handler = handler;
HASH_ADD_STR (nparser->parsers, name, nhandler);
}
+
+
+void
+rspamd_rcl_register_worker_parser (struct config_file *cfg, gint type,
+ gboolean (*func)(ucl_object_t *, gpointer), gpointer ud)
+{
+ struct rspamd_worker_cfg_parser *nparser;
+ HASH_FIND_INT (cfg->wrk_parsers, &type, nparser);
+ if (nparser == NULL) {
+ /* Allocate new parser for this worker */
+ nparser = memory_pool_alloc0 (cfg->cfg_pool, sizeof (struct rspamd_worker_cfg_parser));
+ nparser->type = type;
+ HASH_ADD_INT (cfg->wrk_parsers, type, nparser);
+ }
+
+ nparser->def_obj_parser = func;
+ nparser->def_ud = ud;
+}