aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/surbl.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/plugins/surbl.c b/src/plugins/surbl.c
index 9de3c7b7e..70ca74442 100644
--- a/src/plugins/surbl.c
+++ b/src/plugins/surbl.c
@@ -307,9 +307,16 @@ register_bit_symbols (struct rspamd_config *cfg, struct suffix_item *suffix)
guint i;
GHashTableIter it;
struct surbl_bit_item *bit;
+ gpointer k, v;
if (suffix->ips != NULL) {
g_hash_table_iter_init (&it, suffix->ips);
+
+ while (g_hash_table_iter_next (&it, &k, &v)) {
+ bit = v;
+ register_virtual_symbol (&cfg->cache, bit->symbol, 1);
+ msg_debug ("bit: %d", bit->bit);
+ }
}
else if (suffix->bits != NULL) {
for (i = 0; i < suffix->bits->len; i++) {
@@ -437,7 +444,7 @@ surbl_module_config (struct rspamd_config *cfg)
msg_err ("surbl rule must have explicit symbol definition");
continue;
}
- new_suffix = rspamd_mempool_alloc (surbl_module_ctx->surbl_pool,
+ new_suffix = rspamd_mempool_alloc0 (surbl_module_ctx->surbl_pool,
sizeof (struct suffix_item));
new_suffix->suffix = rspamd_mempool_strdup (
surbl_module_ctx->surbl_pool,
@@ -445,10 +452,6 @@ surbl_module_config (struct rspamd_config *cfg)
new_suffix->options = 0;
new_suffix->bits = g_array_new (FALSE, FALSE,
sizeof (struct surbl_bit_item));
- new_suffix->ips = g_hash_table_new (g_int_hash, g_int_equal);
- rspamd_mempool_add_destructor (surbl_module_ctx->surbl_pool,
- (rspamd_mempool_destruct_t)g_hash_table_unref,
- new_suffix->ips);
rspamd_mempool_add_destructor (surbl_module_ctx->surbl_pool,
(rspamd_mempool_destruct_t)rspamd_array_free_hard,
new_suffix->bits);
@@ -507,10 +510,14 @@ surbl_module_config (struct rspamd_config *cfg)
cur = ucl_obj_get_key (cur_rule, "ips");
if (cur != NULL && cur->type == UCL_OBJECT) {
it = NULL;
+ new_suffix->ips = g_hash_table_new (g_int_hash, g_int_equal);
+ rspamd_mempool_add_destructor (surbl_module_ctx->surbl_pool,
+ (rspamd_mempool_destruct_t)g_hash_table_unref,
+ new_suffix->ips);
+
while ((cur_bit =
ucl_iterate_object (cur, &it, true)) != NULL) {
- if (ucl_object_key (cur_bit) != NULL && cur_bit->type ==
- UCL_INT) {
+ if (ucl_object_key (cur_bit) != NULL) {
gchar *p;
ip_val = ucl_obj_tostring (cur_bit);
@@ -568,11 +575,8 @@ surbl_module_config (struct rspamd_config *cfg)
cur_opt = surbl_module_ctx->suffixes;
while (cur_opt) {
cur_suffix = cur_opt->data;
- if (cur_suffix->bits != NULL) {
+ if (cur_suffix->bits != NULL || cur_suffix->ips != NULL) {
register_bit_symbols (cfg, cur_suffix);
- rspamd_mempool_add_destructor (surbl_module_ctx->surbl_pool,
- (rspamd_mempool_destruct_t) g_list_free,
- cur_suffix->bits);
}
cur_opt = g_list_next (cur_opt);
}