diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2018-12-01 13:23:58 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2018-12-01 13:23:58 +0000 |
commit | b48cbdffc0996e6ddcdf201fc0e92a024919e5d8 (patch) | |
tree | 1dd64d93e15da34472dbe6da76dafd414eafcf38 /src/plugins/dkim_check.c | |
parent | b42c97d562d0ada85e80562677c9f686a8c87cbd (diff) | |
download | rspamd-b48cbdffc0996e6ddcdf201fc0e92a024919e5d8.tar.gz rspamd-b48cbdffc0996e6ddcdf201fc0e92a024919e5d8.zip |
[Minor] Save dkim check result in mempool variable
Diffstat (limited to 'src/plugins/dkim_check.c')
-rw-r--r-- | src/plugins/dkim_check.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/plugins/dkim_check.c b/src/plugins/dkim_check.c index 1549a2add..6ea567178 100644 --- a/src/plugins/dkim_check.c +++ b/src/plugins/dkim_check.c @@ -948,6 +948,7 @@ dkim_module_check (struct dkim_check_result *res) const gchar *strict_value; struct dkim_check_result *first, *cur = NULL; struct dkim_ctx *dkim_module_ctx = dkim_get_context (res->task->cfg); + struct rspamd_task *task = res->task; first = res->first; @@ -957,7 +958,7 @@ dkim_module_check (struct dkim_check_result *res) } if (cur->key != NULL && cur->res == NULL) { - cur->res = rspamd_dkim_check (cur->ctx, cur->key, cur->task); + cur->res = rspamd_dkim_check (cur->ctx, cur->key, task); if (dkim_module_ctx->dkim_domains != NULL) { /* Perform strict check */ @@ -985,6 +986,21 @@ dkim_module_check (struct dkim_check_result *res) } if (all_done) { + /* Create zero terminated array of results */ + struct rspamd_dkim_check_result **pres; + guint nres = 0, i = 0; + + DL_FOREACH (first, cur) { + if (cur->ctx == NULL || cur->res == NULL) { + continue; + } + + nres ++; + } + + pres = rspamd_mempool_alloc (task->task_pool, sizeof (*pres) * (nres + 1)); + pres[nres] = NULL; + DL_FOREACH (first, cur) { const gchar *symbol = NULL, *trace = NULL; gdouble symbol_weight = 1.0; @@ -993,6 +1009,8 @@ dkim_module_check (struct dkim_check_result *res) continue; } + pres[i++] = cur->res; + if (cur->res->rcode == DKIM_REJECT) { symbol = dkim_module_ctx->symbol_reject; trace = "-"; @@ -1019,7 +1037,7 @@ dkim_module_check (struct dkim_check_result *res) gchar *tracebuf; tracelen = strlen (domain) + strlen (selector) + 4; - tracebuf = rspamd_mempool_alloc (cur->task->task_pool, + tracebuf = rspamd_mempool_alloc (task->task_pool, tracelen); rspamd_snprintf (tracebuf, tracelen, "%s:%s", domain, trace); @@ -1029,12 +1047,17 @@ dkim_module_check (struct dkim_check_result *res) tracebuf); rspamd_snprintf (tracebuf, tracelen, "%s:s=%s", domain, selector); - rspamd_task_insert_result (cur->task, + rspamd_task_insert_result (task, symbol, symbol_weight, tracebuf); } + } + + rspamd_mempool_set_variable (task->task_pool, + RSPAMD_MEMPOOL_DKIM_CHECK_RESULTS, + pres, NULL); } } |