]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Save dkim check result in mempool variable
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 1 Dec 2018 13:23:58 +0000 (13:23 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 1 Dec 2018 13:23:58 +0000 (13:23 +0000)
src/plugins/dkim_check.c

index 1549a2add1a7d1d67766fa0a36bb57d34408482a..6ea56717888c18f599688f8fee2f355424db83c8 100644 (file)
@@ -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);
        }
 }