]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Rework] Adopt new maps code
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 9 May 2016 17:55:45 +0000 (18:55 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 9 May 2016 17:55:45 +0000 (18:55 +0100)
Issue: #616

src/libserver/cfg_utils.c
src/libserver/dynamic_cfg.c
src/plugins/surbl.c

index 8cc54c792656726724b52ab744be537de98c9219..233051dcbcd7039dff64849fde8147552061e698 100644 (file)
@@ -42,13 +42,11 @@ struct rspamd_ucl_map_cbdata {
        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,
@@ -1135,8 +1133,7 @@ rspamd_config_check_statfiles (struct rspamd_classifier_config *cf)
 }
 
 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)
@@ -1157,7 +1154,7 @@ rspamd_ucl_read_cb (rspamd_mempool_t * pool,
 }
 
 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;
@@ -1181,33 +1178,25 @@ rspamd_ucl_fin_cb (rspamd_mempool_t * pool, struct map_cb_data *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);
        }
 }
 
index 3a76f20f9b7571b6d7806e777c2871e06754edbc..d31418588b67947c2fcafd884be193d058449ca6 100644 (file)
@@ -134,8 +134,7 @@ apply_dynamic_conf (const ucl_object_t *top, struct rspamd_config *cfg)
 
 /* Callbacks for reading json dynamic rules */
 static gchar *
-json_config_read_cb (rspamd_mempool_t * pool,
-       gchar * chunk,
+json_config_read_cb (gchar * chunk,
        gint len,
        struct map_cb_data *data,
        gboolean final)
@@ -167,7 +166,7 @@ json_config_read_cb (rspamd_mempool_t * pool,
 }
 
 static void
-json_config_fin_cb (rspamd_mempool_t * pool, struct map_cb_data *data)
+json_config_fin_cb (struct map_cb_data *data)
 {
        struct config_json_buf *jb;
        ucl_object_t *top;
index 4dda832b3279eaeece8086b83dfc09a14b3b33b5..35383c829ef84c8e0da9828f40938d38d4507bc3 100644 (file)
@@ -80,7 +80,7 @@ module_t surbl_module = {
 };
 
 static void
-exception_insert (gpointer st, gconstpointer key, gpointer value)
+exception_insert (gpointer st, gconstpointer key, gconstpointer value)
 {
        GHashTable **t = st;
        gint level = 0;
@@ -103,27 +103,27 @@ exception_insert (gpointer st, gconstpointer key, gpointer value)
        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,
@@ -133,7 +133,7 @@ read_exceptions_list (rspamd_mempool_t * pool,
 }
 
 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;
@@ -145,11 +145,12 @@ fin_exceptions_list (rspamd_mempool_t * pool, struct map_cb_data *data)
                                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;
@@ -200,8 +201,7 @@ redirector_item_free (gpointer p)
 }
 
 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)
@@ -217,17 +217,17 @@ read_redirectors_list (rspamd_mempool_t * pool,
                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;