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;
}
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 */
}
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;
continue;
}
+ pres[i++] = cur->res;
+
if (cur->res->rcode == DKIM_REJECT) {
symbol = dkim_module_ctx->symbol_reject;
trace = "-";
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);
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);
}
}