]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Rework parsing of ip lists.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 1 Oct 2014 16:35:47 +0000 (17:35 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 1 Oct 2014 16:35:47 +0000 (17:35 +0100)
src/controller.c
src/fuzzy_storage.c
src/libserver/cfg_file.h
src/libserver/cfg_utils.c
src/libutil/logger.c
src/libutil/radix.c
src/libutil/radix.h
src/plugins/dkim_check.c
src/plugins/fuzzy_check.c
src/plugins/spf.c

index da0a8c31ce6e3f7f3446f49089924a4c584b5b7e..5b2915ef4bf06d9f8500b355499706826af4b812 100644 (file)
@@ -1645,7 +1645,7 @@ start_controller_worker (struct rspamd_worker *worker)
                if (!add_map (worker->srv->cfg, ctx->secure_ip,
                        "Allow webui access from the specified IP",
                        read_radix_list, fin_radix_list, (void **)&ctx->secure_map)) {
-                       if (!rspamd_config_parse_ip_list (ctx->secure_ip,
+                       if (!radix_add_generic_iplist (ctx->secure_ip,
                                &ctx->secure_map)) {
                                msg_warn ("cannot load or parse ip list from '%s'",
                                        ctx->secure_ip);
index 153009435452e441417d3c228919db9a3675e06a..fec7a13c2f9a0ee9d82f122c6552ccf826adfe02 100644 (file)
@@ -1058,7 +1058,7 @@ start_fuzzy (struct rspamd_worker *worker)
                if (!add_map (worker->srv->cfg, ctx->update_map,
                        "Allow fuzzy updates from specified addresses",
                        read_radix_list, fin_radix_list, (void **)&ctx->update_ips)) {
-                       if (!rspamd_config_parse_ip_list (ctx->update_map,
+                       if (!radix_add_generic_iplist (ctx->update_map,
                                &ctx->update_ips)) {
                                msg_warn ("cannot load or parse ip list from '%s'",
                                        ctx->update_map);
index 7e3d60db8eb277b8e5017596276284115838b420..c08fe0c80079e7c87e6057fa65a7aa500d18e71b 100644 (file)
@@ -476,12 +476,6 @@ struct rspamd_classifier_config * rspamd_config_find_classifier (
        struct rspamd_config *cfg,
        const gchar *name);
 
-/*
- * Parse input `ip_list` to radix tree `tree`. Now supports only IPv4 addresses.
- */
-gboolean rspamd_config_parse_ip_list (const gchar *ip_list,
-               radix_compressed_t **tree);
-
 void rspamd_ucl_add_conf_macros (struct ucl_parser *parser,
        struct rspamd_config *cfg);
 
index aecef53d4c8708a13b6558b16d7540def253ae89..f7285d5ed033eba11daa45d8347501fb4931847f 100644 (file)
@@ -1004,16 +1004,6 @@ rspamd_ucl_fin_cb (rspamd_mempool_t * pool, struct map_cb_data *data)
        }
 }
 
-gboolean
-rspamd_config_parse_ip_list (const gchar *ip_list, radix_compressed_t **tree)
-{
-       if (*tree == NULL) {
-               *tree = radix_create_compressed ();
-       }
-
-       return (rspamd_radix_add_iplist (ip_list, ",; ", *tree) > 0);
-}
-
 /*
  * vi:ts=4
  */
index 5db081b61ff1377fbc5af513d3c59001d460a2dc..f25c1fe75a018b32ca7edfaae045d4726942e43c 100644 (file)
@@ -342,7 +342,7 @@ rspamd_set_logger (struct rspamd_config *cfg,
                        "IP addresses for which debug logs are enabled",
                        read_radix_list, fin_radix_list,
                        (void **)&rspamd->logger->debug_ip)) {
-                       rspamd_config_parse_ip_list (rspamd->cfg->debug_ip_map,
+                       radix_add_generic_iplist (rspamd->cfg->debug_ip_map,
                                        &rspamd->logger->debug_ip);
                }
        }
index c8aaaf94623f8f903b865356243f27fdf8016f76..c58125003e1ea5f3dcf61a8c4585e86e11e54afd 100644 (file)
@@ -962,6 +962,16 @@ rspamd_radix_add_iplist (const gchar *list, const gchar *separators,
        return res;
 }
 
+gboolean
+radix_add_generic_iplist (const gchar *ip_list, radix_compressed_t **tree)
+{
+       if (*tree == NULL) {
+               *tree = radix_create_compressed ();
+       }
+
+       return (rspamd_radix_add_iplist (ip_list, ",; ", *tree) > 0);
+}
+
 /*
  * vi:ts=4
  */
index abe2a2899aa375e0d444ba29d62310e594efb6a2..b17731fd778b38545f3a671a066dc4be632469e4 100644 (file)
@@ -130,4 +130,11 @@ radix_compressed_t *radix_create_compressed (void);
 gint rspamd_radix_add_iplist (const gchar *list, const gchar *separators,
                radix_compressed_t *tree);
 
+/**
+ * Generic version of @see rspamd_radix_add_iplist. This function creates tree
+ * if `tree` is NULL.
+ */
+gboolean radix_add_generic_iplist (const gchar *ip_list,
+               radix_compressed_t **tree);
+
 #endif
index 075d23c889caa5216627aa3301aafbd35df75953..bc687065e292c2cab1995934282c81789aedd48a 100644 (file)
@@ -59,7 +59,7 @@ struct dkim_ctx {
        const gchar *symbol_allow;
 
        rspamd_mempool_t *dkim_pool;
-       radix_tree_t *whitelist_ip;
+       radix_compressed_t *whitelist_ip;
        GHashTable *dkim_domains;
        guint strict_multiplier;
        guint time_jitter;
@@ -106,7 +106,7 @@ dkim_module_config (struct rspamd_config *cfg)
        guint cache_size, cache_expire;
        gboolean got_trusted = FALSE;
 
-       dkim_module_ctx->whitelist_ip = radix_tree_create ();
+       dkim_module_ctx->whitelist_ip = radix_create_compressed ();
 
        if ((value =
                rspamd_config_get_module_opt (cfg, "dkim", "symbol_reject")) != NULL) {
@@ -158,8 +158,8 @@ dkim_module_config (struct rspamd_config *cfg)
                if (!add_map (cfg, ucl_obj_tostring (value),
                        "DKIM whitelist", read_radix_list, fin_radix_list,
                        (void **)&dkim_module_ctx->whitelist_ip)) {
-                       msg_warn ("cannot load whitelist from %s",
-                               ucl_obj_tostring (value));
+                       radix_add_generic_iplist (ucl_obj_tostring (value),
+                               &dkim_module_ctx->whitelist_ip);
                }
        }
        if ((value =
@@ -234,7 +234,7 @@ gint
 dkim_module_reconfig (struct rspamd_config *cfg)
 {
        rspamd_mempool_delete (dkim_module_ctx->dkim_pool);
-       radix_tree_free (dkim_module_ctx->whitelist_ip);
+       radix_destroy_compressed (dkim_module_ctx->whitelist_ip);
        if (dkim_module_ctx->dkim_domains) {
                g_hash_table_destroy (dkim_module_ctx->dkim_domains);
        }
@@ -368,10 +368,8 @@ dkim_symbol_callback (struct rspamd_task *task, void *unused)
        if (hlist != NULL) {
                /* Check whitelist */
                msg_debug ("dkim signature found");
-               if (task->from_addr.af == AF_INET ||
-                       radix32tree_find (dkim_module_ctx->whitelist_ip,
-                       ntohl (task->from_addr.addr.s4.sin_addr.s_addr)) ==
-                       RADIX_NO_VALUE) {
+               if (radix_find_compressed_addr (dkim_module_ctx->whitelist_ip,
+                               &task->from_addr) == RADIX_NO_VALUE) {
                        /* Parse signature */
                        msg_debug ("create dkim signature");
                        /*
index 323246f71a96aca3f7a5b5e75ee315e1001913f9..5a53695ee7d275d25c4130a1d2c9dc0495b31388 100644 (file)
@@ -486,7 +486,7 @@ fuzzy_check_module_config (struct rspamd_config *cfg)
                if (!add_map (cfg, ucl_obj_tostring (value),
                        "Fuzzy whitelist", read_radix_list, fin_radix_list,
                        (void **)&fuzzy_module_ctx->whitelist)) {
-                       rspamd_config_parse_ip_list (ucl_obj_tostring (value),
+                       radix_add_generic_iplist (ucl_obj_tostring (value),
                                        &fuzzy_module_ctx->whitelist);
                }
        }
index e435da36d55ca39a38ccbd18569ff2dd12245998..9e172187927fb417ee636059a5c1eec658769a3d 100644 (file)
@@ -140,7 +140,7 @@ spf_module_config (struct rspamd_config *cfg)
                if (!add_map (cfg, ucl_obj_tostring (value),
                        "SPF whitelist", read_radix_list, fin_radix_list,
                        (void **)&spf_module_ctx->whitelist_ip)) {
-                       rspamd_config_parse_ip_list (ucl_obj_tostring (value),
+                       radix_add_generic_iplist (ucl_obj_tostring (value),
                                &spf_module_ctx->whitelist_ip);
                }
        }