nshots = cfg->default_max_shots;
if ((elt = ucl_object_lookup (obj, "one_shot")) != NULL) {
+ if (ucl_object_type (elt) != UCL_BOOLEAN) {
+ g_set_error (err,
+ CFG_RCL_ERROR,
+ EINVAL,
+ "one_shot attribute is not boolean for symbol: '%s'",
+ key);
+
+ return FALSE;
+ }
if (ucl_object_toboolean (elt)) {
nshots = 1;
}
}
if ((elt = ucl_object_lookup (obj, "any_shot")) != NULL) {
+ if (ucl_object_type (elt) != UCL_BOOLEAN) {
+ g_set_error (err,
+ CFG_RCL_ERROR,
+ EINVAL,
+ "any_shot attribute is not boolean for symbol: '%s'",
+ key);
+
+ return FALSE;
+ }
if (ucl_object_toboolean (elt)) {
nshots = -1;
}
}
if ((elt = ucl_object_lookup (obj, "one_param")) != NULL) {
+ if (ucl_object_type (elt) != UCL_BOOLEAN) {
+ g_set_error (err,
+ CFG_RCL_ERROR,
+ EINVAL,
+ "one_param attribute is not boolean for symbol: '%s'",
+ key);
+
+ return FALSE;
+ }
+
if (ucl_object_toboolean (elt)) {
flags |= RSPAMD_SYMBOL_FLAG_ONEPARAM;
}
}
if ((elt = ucl_object_lookup (obj, "ignore")) != NULL) {
+ if (ucl_object_type (elt) != UCL_BOOLEAN) {
+ g_set_error (err,
+ CFG_RCL_ERROR,
+ EINVAL,
+ "ignore attribute is not boolean for symbol: '%s'",
+ key);
+
+ return FALSE;
+ }
+
if (ucl_object_toboolean (elt)) {
flags |= RSPAMD_SYMBOL_FLAG_IGNORE;
}
}
if ((elt = ucl_object_lookup (obj, "nshots")) != NULL) {
+ if (ucl_object_type (elt) != UCL_FLOAT && ucl_object_type (elt) != UCL_INT) {
+ g_set_error (err,
+ CFG_RCL_ERROR,
+ EINVAL,
+ "nshots attribute is not numeric for symbol: '%s'",
+ key);
+
+ return FALSE;
+ }
+
nshots = ucl_object_toint (elt);
}
elt = ucl_object_lookup_any (obj, "score", "weight", NULL);
if (elt) {
+ if (ucl_object_type (elt) != UCL_FLOAT && ucl_object_type (elt) != UCL_INT) {
+ g_set_error (err,
+ CFG_RCL_ERROR,
+ EINVAL,
+ "score attribute is not numeric for symbol: '%s'",
+ key);
+
+ return FALSE;
+ }
+
score = ucl_object_todouble (elt);
}
elt = ucl_object_lookup (obj, "priority");
if (elt) {
+ if (ucl_object_type (elt) != UCL_FLOAT && ucl_object_type (elt) != UCL_INT) {
+ g_set_error (err,
+ CFG_RCL_ERROR,
+ EINVAL,
+ "priority attribute is not numeric for symbol: '%s'",
+ key);
+
+ return FALSE;
+ }
+
priority = ucl_object_toint (elt);
}
else {
module_t *mod, **pmod;
guint i = 0;
struct module_ctx *mod_ctx, *cur_ctx;
+ gboolean ret = TRUE;
/* Init all compiled modules */
mod_ctx->enabled = rspamd_config_is_module_enabled (cfg, mod->name);
if (reconfig) {
- (void)mod->module_reconfig_func (cfg);
- msg_info_config ("reconfig of %s", mod->name);
+ if (!mod->module_reconfig_func (cfg)) {
+ msg_err_config ("reconfig of %s failed!", mod->name);
+ }
+ else {
+ msg_info_config ("reconfig of %s", mod->name);
+ }
+
}
else {
- (void)mod->module_config_func (cfg);
+ if (!mod->module_config_func (cfg)) {
+ msg_info_config ("config of %s failed!", mod->name);
+ ret = FALSE;
+ }
}
}
cur = g_list_next (cur);
}
- return rspamd_init_lua_filters (cfg, 0);
+ ret = rspamd_init_lua_filters (cfg, 0) && ret;
+
+ return ret;
}
static void
elt = ucl_object_lookup (value, "score");
if (elt) {
- score = ucl_object_todouble (elt);
+ if (ucl_object_type (elt) != UCL_FLOAT && ucl_object_type (elt) != UCL_INT) {
+ msg_err_config (
+ "score attribute is not numeric for symbol: '%s'",
+ cur_item->symbol);
+
+ res = FALSE;
+ }
+ else {
+ score = ucl_object_todouble (elt);
+ }
}
elt = ucl_object_lookup (value, "one_shot");
if (elt) {
- if (ucl_object_toboolean (elt)) {
- nshots = 1;
+ if (ucl_object_type (elt) != UCL_BOOLEAN) {
+ msg_err_config (
+ "one_shot attribute is not numeric for symbol: '%s'",
+ cur_item->symbol);
+
+ res = FALSE;
+ }
+ else {
+ if (ucl_object_toboolean (elt)) {
+ nshots = 1;
+ }
}
}
if ((elt = ucl_object_lookup (value, "any_shot")) != NULL) {
- if (ucl_object_toboolean (elt)) {
- nshots = -1;
+ if (ucl_object_type (elt) != UCL_BOOLEAN) {
+ msg_err_config (
+ "any_shot attribute is not numeric for symbol: '%s'",
+ cur_item->symbol);
+
+ res = FALSE;
+ }
+ else {
+ if (ucl_object_toboolean (elt)) {
+ nshots = -1;
+ }
}
}
if ((elt = ucl_object_lookup (value, "nshots")) != NULL) {
- nshots = ucl_object_toint (elt);
+ if (ucl_object_type (elt) != UCL_FLOAT && ucl_object_type (elt) != UCL_INT) {
+ msg_err_config (
+ "nshots attribute is not numeric for symbol: '%s'",
+ cur_item->symbol);
+
+ res = FALSE;
+ }
+ else {
+ nshots = ucl_object_toint (elt);
+ }
}
elt = ucl_object_lookup (value, "one_param");
if (elt) {
- if (ucl_object_toboolean (elt)) {
- flags |= RSPAMD_SYMBOL_FLAG_ONEPARAM;
+ if (ucl_object_type (elt) != UCL_BOOLEAN) {
+ msg_err_config (
+ "one_param attribute is not numeric for symbol: '%s'",
+ cur_item->symbol);
+
+ res = FALSE;
+ }
+ else {
+ if (ucl_object_toboolean (elt)) {
+ flags |= RSPAMD_SYMBOL_FLAG_ONEPARAM;
+ }
}
}
elt = ucl_object_lookup (value, "priority");
if (elt) {
- priority = ucl_object_toint (elt);
+ if (ucl_object_type (elt) != UCL_FLOAT && ucl_object_type (elt) != UCL_INT) {
+ msg_err_config (
+ "priority attribute is not numeric for symbol: '%s'",
+ cur_item->symbol);
+
+ res = FALSE;
+ }
+ else {
+ priority = ucl_object_toint (elt);
+ }
+ }
+ else {
+ priority = ucl_object_get_priority (value) + 1;
}
rspamd_config_add_symbol (cfg, cur_item->symbol,
ret = rspamd_config_post_load (cfg, RSPAMD_CONFIG_INIT_SYMCACHE);
}
- if (!rspamd_symcache_validate (rspamd_main->cfg->cache,
+ if (ret && !rspamd_symcache_validate (rspamd_main->cfg->cache,
rspamd_main->cfg,
FALSE)) {
ret = FALSE;