]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Feature] Add DKIM trace symbol
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 8 Oct 2017 10:34:45 +0000 (11:34 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 8 Oct 2017 10:34:45 +0000 (11:34 +0100)
src/plugins/dkim_check.c

index b554ec48cbf8e9c80e4d5b43c1393b0e0892a748..055498746c4575a47d923a92500fbcd37c01d621 100644 (file)
@@ -546,6 +546,9 @@ dkim_module_config (struct rspamd_config *cfg)
                                        rspamd_config_add_metric_symbol (cfg,
                                                        "DKIM_SIGN", 0.0, "DKIM signature fake symbol",
                                                        "dkim", RSPAMD_SYMBOL_FLAG_IGNORE, 1, 1);
+                                       rspamd_config_add_metric_symbol (cfg,
+                                                       "DKIM_TRACE", 0.0, "DKIM trace symbol",
+                                                       "dkim", RSPAMD_SYMBOL_FLAG_IGNORE, 1, 1);
 
                                }
                                else {
@@ -886,7 +889,7 @@ dkim_module_check (struct dkim_check_result *res)
 
        if (all_done) {
                DL_FOREACH (first, cur) {
-                       const gchar *symbol = NULL;
+                       const gchar *symbol = NULL, *trace = NULL;
                        int symbol_weight = 1;
 
                        if (cur->ctx == NULL) {
@@ -894,24 +897,41 @@ dkim_module_check (struct dkim_check_result *res)
                        }
                        if (cur->res == DKIM_REJECT) {
                                symbol = dkim_module_ctx->symbol_reject;
+                               trace = "-";
                                symbol_weight = cur->mult_deny * 1.0;
                        }
                        else if (cur->res == DKIM_CONTINUE) {
                                symbol = dkim_module_ctx->symbol_allow;
+                               trace = "+";
                                symbol_weight = cur->mult_allow * 1.0;
                        }
                        else if (cur->res == DKIM_PERM_ERROR) {
+                               trace = "~";
                                symbol = dkim_module_ctx->symbol_permfail;
                        }
                        else if (cur->res == DKIM_TRYAGAIN) {
+                               trace = "?";
                                symbol = dkim_module_ctx->symbol_tempfail;
                        }
 
                        if (symbol != NULL) {
+                               const gchar *domain = rspamd_dkim_get_domain (cur->ctx);
+                               gsize tracelen;
+                               gchar *tracebuf;
+
+                               tracelen = strlen (domain) + 3; /* :<trace>\0 */
+                               tracebuf = rspamd_mempool_alloc (cur->task->task_pool,
+                                               tracelen);
+                               rspamd_snprintf (tracebuf, tracelen, "%s:%s", domain, trace);
+
                                rspamd_task_insert_result (cur->task,
                                                symbol,
                                                symbol_weight,
-                                               rspamd_dkim_get_domain (cur->ctx));
+                                               domain);
+                               rspamd_task_insert_result (cur->task,
+                                               "DKIM_TRACE",
+                                               0.0,
+                                               tracebuf);
                        }
                }
                rspamd_session_watcher_pop (res->task->s, res->w);