Parcourir la source

[Feature] Allow dkim domains check in surbl

tags/1.8.1
Vsevolod Stakhov il y a 5 ans
Parent
révision
cda304d023
1 fichiers modifiés avec 50 ajouts et 0 suppressions
  1. 50
    0
      src/plugins/surbl.c

+ 50
- 0
src/plugins/surbl.c Voir le fichier

@@ -70,6 +70,7 @@ INIT_LOG_MODULE(surbl)
#define SURBL_OPTION_NOIP (1 << 0)
#define SURBL_OPTION_RESOLVEIP (1 << 1)
#define SURBL_OPTION_CHECKIMAGES (1 << 2)
#define SURBL_OPTION_CHECKDKIM (1 << 3)
#define MAX_LEVELS 10

struct surbl_ctx {
@@ -574,6 +575,15 @@ surbl_module_init (struct rspamd_config *cfg, struct module_ctx **ctx)
0,
NULL,
0);
rspamd_rcl_add_doc_by_path (cfg,
"surbl.rule",
"Check domains in valid DKIM signatures",
"check_dkim",
UCL_BOOLEAN,
NULL,
0,
NULL,
0);

return 0;
}
@@ -730,6 +740,13 @@ surbl_module_parse_rule (const ucl_object_t* value, struct rspamd_config* cfg)
}
}

cur = ucl_object_lookup (cur_rule, "check_dkim");
if (cur != NULL && cur->type == UCL_BOOLEAN) {
if (ucl_object_toboolean (cur)) {
new_suffix->options |= SURBL_OPTION_CHECKDKIM;
}
}

if ((new_suffix->options & (SURBL_OPTION_RESOLVEIP | SURBL_OPTION_NOIP))
== (SURBL_OPTION_NOIP | SURBL_OPTION_RESOLVEIP)) {
/* Mutually exclusive options */
@@ -1057,12 +1074,20 @@ surbl_module_config (struct rspamd_config *cfg)
surbl_module_ctx->suffixes);
}


cur_opt = surbl_module_ctx->suffixes;
while (cur_opt) {
cur_suffix = cur_opt->data;

if (cur_suffix->bits != NULL || cur_suffix->ips != NULL) {
register_bit_symbols (cfg, cur_suffix, cur_suffix->callback_id);
}

if (cur_suffix->options & SURBL_OPTION_CHECKDKIM) {
rspamd_symbols_cache_add_dependency (cfg->cache,
cur_suffix->callback_id, "DKIM_TRACE");
}

cur_opt = g_list_next (cur_opt);
}

@@ -1895,6 +1920,31 @@ surbl_test_url (struct rspamd_task *task, void *user_data)
}
}
}

if (suffix->options & SURBL_OPTION_CHECKDKIM) {
struct rspamd_symbol_result *s;
struct rspamd_symbol_option *opt;

s = rspamd_task_find_symbol_result (task, "DKIM_TRACE");

if (s && s->opts_head) {
DL_FOREACH (s->opts_head, opt) {
gsize len = strlen (opt->option);
gchar *p = opt->option + len - 1;

if (*p == '+') {
url = rspamd_html_process_url (task->task_pool,
opt->option, len - 2, NULL);

if (url) {
surbl_tree_url_callback (url, url, param);
msg_debug_surbl ("checked dkim url %s over %s",
url->string, suffix->suffix);
}
}
}
}
}
}

static void

Chargement…
Annuler
Enregistrer