struct rspamd_config *cfg;
GString *buf;
};
-static gchar * rspamd_ucl_read_cb (rspamd_mempool_t * pool,
- gchar * chunk,
+static gchar * rspamd_ucl_read_cb (gchar * chunk,
gint len,
struct map_cb_data *data,
gboolean final);
-static void rspamd_ucl_fin_cb (rspamd_mempool_t * pool,
- struct map_cb_data *data);
+static void rspamd_ucl_fin_cb (struct map_cb_data *data);
gboolean
rspamd_parse_bind_line (struct rspamd_config *cfg,
}
static gchar *
-rspamd_ucl_read_cb (rspamd_mempool_t * pool,
- gchar * chunk,
+rspamd_ucl_read_cb (gchar * chunk,
gint len,
struct map_cb_data *data,
gboolean final)
}
static void
-rspamd_ucl_fin_cb (rspamd_mempool_t * pool, struct map_cb_data *data)
+rspamd_ucl_fin_cb (struct map_cb_data *data)
{
struct rspamd_ucl_map_cbdata *cbdata = data->cur_data, *prev =
data->prev_data;
}
checksum = XXH64 (cbdata->buf->str, cbdata->buf->len, 0);
- if (data->map->checksum != checksum) {
- /* New data available */
- parser = ucl_parser_new (0);
- if (!ucl_parser_add_chunk (parser, cbdata->buf->str,
+ /* New data available */
+ parser = ucl_parser_new (0);
+ if (!ucl_parser_add_chunk (parser, cbdata->buf->str,
cbdata->buf->len)) {
- msg_err_config ("cannot parse map %s: %s",
- data->map->uri,
+ msg_err_config ("cannot parse map %s: %s",
+ data->map->name,
ucl_parser_get_error (parser));
- ucl_parser_free (parser);
- }
- else {
- obj = ucl_parser_get_object (parser);
- ucl_parser_free (parser);
- it = NULL;
-
- while ((cur = ucl_object_iterate (obj, &it, true))) {
- ucl_object_replace_key (cbdata->cfg->rcl_obj, (ucl_object_t *)cur,
- cur->key, cur->keylen, false);
- }
- ucl_object_unref (obj);
- data->map->checksum = checksum;
- }
+ ucl_parser_free (parser);
}
else {
- msg_info_config ("do not reload map %s, checksum is the same: %d",
- data->map->uri,
- checksum);
+ obj = ucl_parser_get_object (parser);
+ ucl_parser_free (parser);
+ it = NULL;
+
+ while ((cur = ucl_object_iterate (obj, &it, true))) {
+ ucl_object_replace_key (cbdata->cfg->rcl_obj, (ucl_object_t *)cur,
+ cur->key, cur->keylen, false);
+ }
+ ucl_object_unref (obj);
}
}
};
static void
-exception_insert (gpointer st, gconstpointer key, gpointer value)
+exception_insert (gpointer st, gconstpointer key, gconstpointer value)
{
GHashTable **t = st;
gint level = 0;
val = g_malloc (sizeof (rspamd_ftok_t));
val->begin = key;
val->len = strlen (key);
+
if (t[level] == NULL) {
t[level] = g_hash_table_new_full (rspamd_ftok_icase_hash,
rspamd_ftok_icase_equal,
g_free,
- NULL);
+ g_free);
}
- g_hash_table_insert (t[level], val, value);
+
+ g_hash_table_insert (t[level], val, g_strdup (value));
}
static gchar *
-read_exceptions_list (rspamd_mempool_t * pool,
- gchar * chunk,
+read_exceptions_list (gchar * chunk,
gint len,
struct map_cb_data *data,
gboolean final)
{
if (data->cur_data == NULL) {
- data->cur_data = rspamd_mempool_alloc0 (pool,
- sizeof (GHashTable *) * MAX_LEVELS);
+ data->cur_data = g_malloc (sizeof (GHashTable *) * MAX_LEVELS);
}
- return rspamd_parse_kv_list (pool,
+ return rspamd_parse_kv_list (
chunk,
len,
data,
}
static void
-fin_exceptions_list (rspamd_mempool_t * pool, struct map_cb_data *data)
+fin_exceptions_list (struct map_cb_data *data)
{
GHashTable **t;
gint i;
g_hash_table_destroy (t[i]);
}
}
+ g_free (t);
}
}
static void
-redirector_insert (gpointer st, gconstpointer key, gpointer value)
+redirector_insert (gpointer st, gconstpointer key, gconstpointer value)
{
GHashTable *tld_hash = st;
const gchar *p = key, *begin = key;
}
static gchar *
-read_redirectors_list (rspamd_mempool_t * pool,
- gchar * chunk,
+read_redirectors_list (gchar * chunk,
gint len,
struct map_cb_data *data,
gboolean final)
data->cur_data = tld_hash;
}
- return rspamd_parse_kv_list (pool,
+ return rspamd_parse_kv_list (
chunk,
len,
data,
- (insert_func) redirector_insert,
+ redirector_insert,
"",
final);
}
void
-fin_redirectors_list (rspamd_mempool_t * pool, struct map_cb_data *data)
+fin_redirectors_list (struct map_cb_data *data)
{
GHashTable *tld_hash;