aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2018-12-01 13:23:58 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2018-12-01 13:23:58 +0000
commitb48cbdffc0996e6ddcdf201fc0e92a024919e5d8 (patch)
tree1dd64d93e15da34472dbe6da76dafd414eafcf38
parentb42c97d562d0ada85e80562677c9f686a8c87cbd (diff)
downloadrspamd-b48cbdffc0996e6ddcdf201fc0e92a024919e5d8.tar.gz
rspamd-b48cbdffc0996e6ddcdf201fc0e92a024919e5d8.zip
[Minor] Save dkim check result in mempool variable
-rw-r--r--src/plugins/dkim_check.c29
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);
}
}