Преглед на файлове

[Fix] Do not check DMARC if SPF or DKIM were not checked

Issue: #1629
tags/1.6.0
Vsevolod Stakhov преди 7 години
родител
ревизия
37a04a9e42
променени са 3 файла, в които са добавени 36 реда и са изтрити 1 реда
  1. 15
    1
      src/plugins/dkim_check.c
  2. 6
    0
      src/plugins/lua/dmarc.lua
  3. 15
    0
      src/plugins/spf.c

+ 15
- 1
src/plugins/dkim_check.c Целия файл

@@ -870,7 +870,21 @@ dkim_symbol_callback (struct rspamd_task *task, void *unused)
GError *err = NULL;
struct rspamd_mime_header *rh;
struct dkim_check_result *res = NULL, *cur;
guint checked = 0, i;
guint checked = 0, i, *dmarc_checks;

/* Allow dmarc */
dmarc_checks = rspamd_mempool_get_variable (task->task_pool, "dmarc_checks");

if (dmarc_checks) {
(*dmarc_checks) ++;
}
else {
dmarc_checks = rspamd_mempool_alloc (task->task_pool,
sizeof (*dmarc_checks));
*dmarc_checks = 1;
rspamd_mempool_set_variable (task->task_pool, "dmarc_checks",
dmarc_checks, NULL);
}

/* First check if plugin should be enabled */
if ((!dkim_module_ctx->check_authed && task->user != NULL)

+ 6
- 0
src/plugins/lua/dmarc.lua Целия файл

@@ -255,6 +255,12 @@ local function dmarc_callback(task)
local dmarc_domain, efromdom, spf_domain
local ip_addr = task:get_ip()
local dkim_results = {}
local dmarc_checks = task:get_mempool():get_variable('dmarc_checks', 'int') or 0

if dmarc_checks ~= 2 then
rspamd_logger.infox(task, "skip DMARC checks as either SPF or DKIM were not checked");
return
end

if ((not check_authed and task:get_user()) or
(not check_local and ip_addr and ip_addr:is_local())) then

+ 15
- 0
src/plugins/spf.c Целия файл

@@ -549,6 +549,21 @@ spf_symbol_callback (struct rspamd_task *task, void *unused)
const gchar *domain;
struct spf_resolved *l;
struct rspamd_async_watcher *w;
gint *dmarc_checks;

/* Allow dmarc */
dmarc_checks = rspamd_mempool_get_variable (task->task_pool, "dmarc_checks");

if (dmarc_checks) {
(*dmarc_checks) ++;
}
else {
dmarc_checks = rspamd_mempool_alloc (task->task_pool,
sizeof (*dmarc_checks));
*dmarc_checks = 1;
rspamd_mempool_set_variable (task->task_pool, "dmarc_checks",
dmarc_checks, NULL);
}

if (radix_find_compressed_addr (spf_module_ctx->whitelist_ip,
task->from_addr) != RADIX_NO_VALUE) {

Loading…
Отказ
Запис