return 0;
}
+ it = ucl_object_iterate_new (obj);
+
for (i = 0; i < 3; i++) {
- cur = ucl_object_iterate (obj, &it, TRUE);
+ cur = ucl_object_iterate_safe (it, TRUE);
if (cur == NULL) {
break;
}
}
}
+ ucl_object_iterate_free (it);
+
if (dump_dynamic_config (ctx->cfg)) {
msg_info_session ("<%s> modified %d actions",
rspamd_inet_address_to_string (session->from_addr),
return 0;
}
- while ((cur = ucl_object_iterate (obj, &iter, true))) {
+ iter = ucl_object_iterate_new (obj);
+
+ while ((cur = ucl_object_iterate_safe (iter, true))) {
if (cur->type != UCL_OBJECT) {
msg_err_session ("json array data error");
rspamd_controller_send_error (conn_ent, 400, "Cannot parse input");
ucl_object_unref (obj);
+ ucl_object_iterate_free (iter);
+
return 0;
}
rspamd_controller_send_error (conn_ent, 506,
"Add symbol failed");
ucl_object_unref (obj);
+ ucl_object_iterate_free (iter);
+
return 0;
}
added ++;
}
}
+ ucl_object_iterate_free (iter);
+
if (added > 0) {
if (ctx->cfg->dynamic_conf) {
if (dump_dynamic_config (ctx->cfg)) {
struct metric_actions_cbdata *cbdata = ud;
gint action_value;
const ucl_object_t *cur;
- ucl_object_iter_t it = NULL;
+ ucl_object_iter_t it;
struct rspamd_metric *metric;
struct rspamd_config *cfg;
metric = cbdata->metric;
cfg = cbdata->cfg;
+ it = ucl_object_iterate_new (obj);
- while ((cur = ucl_object_iterate (obj, &it, true)) != NULL) {
+ while ((cur = ucl_object_iterate_safe (it, true)) != NULL) {
if (!rspamd_action_from_str (ucl_object_key (cur), &action_value) ||
!ucl_object_todouble_safe (cur, &action_score)) {
g_set_error (err,
EINVAL,
"invalid action definition: '%s'",
ucl_object_key (cur));
+ ucl_object_iterate_free (it);
+
return FALSE;
}
else {
}
}
+ ucl_object_iterate_free (it);
+
return TRUE;
}
/* This name is more logical */
if (val != NULL) {
it = ucl_object_iterate_new (val);
+
while ((cur = ucl_object_iterate_safe (it, true)) != NULL) {
if (!ucl_object_tostring_safe (cur, &worker_bind)) {
continue;
return FALSE;
}
}
+
ucl_object_iterate_free (it);
}
wparser = g_hash_table_lookup (cfg->wrk_parsers, &qtype);
if (wparser != NULL && obj->type == UCL_OBJECT) {
- it = NULL;
- while ((cur = ucl_object_iterate (obj, &it, true)) != NULL) {
+ it = ucl_object_iterate_new (obj);
+
+ while ((cur = ucl_object_iterate_safe (it, true)) != NULL) {
srch.name = ucl_object_key (cur);
srch.ptr = wrk->ctx; /* XXX: is it valid? */
whandler = g_hash_table_lookup (wparser->parsers, &srch);
&whandler->parser,
section,
err)) {
+
+ ucl_object_iterate_free (it);
return FALSE;
}
}
}
}
+
+ ucl_object_iterate_free (it);
+
if (wparser->def_obj_parser != NULL) {
robj = ucl_object_ref (obj);
ccf->name = ccf->classifier;
}
- while ((val = ucl_object_iterate (obj, &it, true)) != NULL && res) {
+ it = ucl_object_iterate_new (obj);
+
+ while ((val = ucl_object_iterate_safe (it, true)) != NULL && res) {
st_key = ucl_object_key (val);
+
if (st_key != NULL) {
if (g_ascii_strcasecmp (st_key, "statfile") == 0) {
LL_FOREACH (val, cur) {
cur, cfg->cfg_pool, err);
if (!res) {
+ ucl_object_iterate_free (it);
+
return FALSE;
}
}
}
}
}
+
+ ucl_object_iterate_free (it);
}
else {
msg_err_config ("fatal configuration error, cannot parse statfile definition");
const ucl_object_t *cur;
gboolean success = TRUE;
- while ((cur = ucl_iterate_object (obj, &it, true))) {
- success = rspamd_rcl_composite_handler(pool, cur, ucl_object_key(cur), ud, section, err);
+ it = ucl_object_iterate_new (obj);
+
+ while ((cur = ucl_object_iterate_safe (it, true))) {
+ success = rspamd_rcl_composite_handler(pool, cur,
+ ucl_object_key(cur), ud, section, err);
if (!success) {
break;
}
}
+ ucl_object_iterate_free (it);
+
return success;
}
g_assert (obj != NULL);
g_assert (sec->handler != NULL);
- it = NULL;
-
if (sec->key_attr != NULL) {
- while ((cur = ucl_object_iterate (obj, &it, true)) != NULL) {
+ it = ucl_object_iterate_new (obj);
+
+ while ((cur = ucl_object_iterate_full (it, UCL_ITERATE_EXPLICIT)) != NULL) {
if (ucl_object_type (cur) != UCL_OBJECT) {
is_nested = FALSE;
break;
}
}
+
+ ucl_object_iterate_free (it);
}
else {
is_nested = FALSE;
if (is_nested) {
/* Just reiterate on all subobjects */
- it = NULL;
+ it = ucl_object_iterate_new (obj);
- while ((cur = ucl_object_iterate (obj, &it, true)) != NULL) {
+ while ((cur = ucl_object_iterate_full (it, UCL_ITERATE_EXPLICIT)) != NULL) {
if (!sec->handler (pool, cur, ucl_object_key (cur), ptr, sec, err)) {
+ ucl_object_iterate_free (it);
+
return FALSE;
}
}
+ ucl_object_iterate_free (it);
+
return TRUE;
}
else {
if (cur == NULL) {
if (sec->default_key == NULL) {
g_set_error (err, CFG_RCL_ERROR, EINVAL, "required attribute "
- "'%s' is missing for section '%s'", sec->key_attr,
- sec->name);
+ "'%s' is missing for section '%s', current key: %s",
+ sec->key_attr,
+ sec->name,
+ ucl_object_emit (obj, UCL_EMIT_CONFIG));
return FALSE;
}
else {
EINVAL,
"cannot convert an object or array to string: %s",
ucl_object_key (obj));
+ ucl_object_iterate_free (iter);
+
return FALSE;
}
rspamd_rcl_insert_string_list_item (target, pool, val, is_hash);
}
+ ucl_object_iterate_free (iter);
+
if (*target == NULL) {
g_set_error (err,
CFG_RCL_ERROR,
ucl_object_iter_t it = NULL;
const ucl_object_t *cur, *n;
- while ((cur = ucl_object_iterate (arr, &it, true)) != NULL) {
+ it = ucl_object_iterate_new (arr);
+
+ while ((cur = ucl_object_iterate_safe (it, true)) != NULL) {
if (cur->type == UCL_OBJECT) {
n = ucl_object_lookup (cur, "name");
if (n && n->type == UCL_STRING &&
strcmp (name, ucl_object_tostring (n)) == 0) {
+ ucl_object_iterate_free (it);
+
return (ucl_object_t *)ucl_object_lookup (cur, "value");
}
}
}
+ ucl_object_iterate_free (it);
+
return NULL;
}
ucl_object_iter_t it = NULL;
const ucl_object_t *cur, *n;
- while ((cur = ucl_object_iterate (arr, &it, true)) != NULL) {
+ it = ucl_object_iterate_new (arr);
+
+ while ((cur = ucl_object_iterate_safe (it, true)) != NULL) {
if (cur->type == UCL_OBJECT) {
n = ucl_object_lookup (cur, "metric");
if (n && n->type == UCL_STRING &&
strcmp (metric, ucl_object_tostring (n)) == 0) {
+ ucl_object_iterate_free (it);
+
return (ucl_object_t *)cur;
}
}
}
+ ucl_object_iterate_free (it);
+
return NULL;
}