]> source.dussan.org Git - rspamd.git/commitdiff
Add an utility to parse IP tree from a string.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 28 Feb 2014 17:31:45 +0000 (17:31 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 21 Mar 2014 11:47:14 +0000 (11:47 +0000)
Conflicts:

src/webui.c

src/cfg_file.h
src/cfg_utils.c
src/webui.c

index 6f3489455c004070d673f80a8b1acf14f9617dca..9908868a2d595ac895f6f5962049c7d700460025 100644 (file)
@@ -505,6 +505,11 @@ gboolean check_classifier_statfiles (struct classifier_config *cf);
  */
 struct classifier_config* find_classifier_conf (struct config_file *cfg, const gchar *name);
 
+/*
+ * Parse input `ip_list` to radix tree `tree`. Now supports only IPv4 addresses.
+ */
+gboolean rspamd_parse_ip_list (const gchar *ip_list, radix_tree_t **tree);
+
 #endif /* ifdef CFG_FILE_H */
 /* 
  * vi:ts=4 
index eb2bfdd9d72686f69f617850f967faf08811f725..d2e61cbfd733f290c5267330aee8bd748f8e1897 100644 (file)
@@ -994,6 +994,30 @@ rspamd_ucl_fin_cb (memory_pool_t * pool, struct map_cb_data *data)
        }
 }
 
+gboolean
+rspamd_parse_ip_list (const gchar *ip_list, radix_tree_t **tree)
+{
+       gchar                           **strvec, **cur;
+       struct in_addr                   ina;
+       guint32                           mask;
+
+       strvec = g_strsplit_set (ip_list, ",", 0);
+       cur = strvec;
+
+       while (*cur != NULL) {
+               /* XXX: handle only ipv4 addresses */
+               if (parse_ipmask_v4 (*cur, &ina, &mask)) {
+                       if (*tree == NULL) {
+                               *tree = radix_tree_create ();
+                       }
+                       radix32tree_add (*tree, htonl (ina.s_addr), mask, 1);
+               }
+               cur ++;
+       }
+
+       return (*tree != NULL);
+}
+
 /*
  * vi:ts=4
  */
index 24271e0abfb6c1b475eea2d2289e44b0ba5dc161..28c3e857615f5b4bdd45f07d802ca2bc2436e4ea 100644 (file)
@@ -1772,6 +1772,9 @@ start_webui_worker (struct rspamd_worker *worker)
 
        ctx->start_time = time (NULL);
        ctx->worker = worker;
+       ctx->cfg = worker->srv->cfg;
+       ctx->srv = worker->srv;
+
        /* Accept event */
        ctx->http = evhttp_new (ctx->ev_base);