From 2a243ba4f114f07b17f3181e5de74f0349a363fe Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 5 Jul 2017 08:31:17 +0100 Subject: [Feature] Allow to discard messages instead of rejection Issue: #1723 --- src/libserver/milter.c | 30 +++++++++++++++++++----------- src/libserver/milter.h | 2 +- 2 files changed, 20 insertions(+), 12 deletions(-) (limited to 'src/libserver') diff --git a/src/libserver/milter.c b/src/libserver/milter.c index dad7c5afa..4f235c2aa 100644 --- a/src/libserver/milter.c +++ b/src/libserver/milter.c @@ -49,6 +49,7 @@ struct rspamd_milter_context { gchar *spam_header; void *sessions_cache; + gboolean discard_on_reject; }; static struct rspamd_milter_context *milter_ctx = NULL; @@ -1565,18 +1566,23 @@ rspamd_milter_send_task_results (struct rspamd_milter_session *session, switch (action) { case METRIC_ACTION_REJECT: - rcode = rspamd_fstring_new_init (RSPAMD_MILTER_RCODE_REJECT, - sizeof (RSPAMD_MILTER_RCODE_REJECT) - 1); - xcode = rspamd_fstring_new_init (RSPAMD_MILTER_XCODE_REJECT, - sizeof (RSPAMD_MILTER_XCODE_REJECT) - 1); - - if (!reply) { - reply = rspamd_fstring_new_init (RSPAMD_MILTER_REJECT_MESSAGE, - sizeof (RSPAMD_MILTER_REJECT_MESSAGE) - 1); + if (milter_ctx->discard_on_reject) { + rspamd_milter_send_action (session, RSPAMD_MILTER_DISCARD); } + else { + rcode = rspamd_fstring_new_init (RSPAMD_MILTER_RCODE_REJECT, + sizeof (RSPAMD_MILTER_RCODE_REJECT) - 1); + xcode = rspamd_fstring_new_init (RSPAMD_MILTER_XCODE_REJECT, + sizeof (RSPAMD_MILTER_XCODE_REJECT) - 1); + + if (!reply) { + reply = rspamd_fstring_new_init (RSPAMD_MILTER_REJECT_MESSAGE, + sizeof (RSPAMD_MILTER_REJECT_MESSAGE) - 1); + } - rspamd_milter_set_reply (session, rcode, xcode, reply); - rspamd_milter_send_action (session, RSPAMD_MILTER_REJECT); + rspamd_milter_set_reply (session, rcode, xcode, reply); + rspamd_milter_send_action (session, RSPAMD_MILTER_REJECT); + } break; case METRIC_ACTION_SOFT_REJECT: rcode = rspamd_fstring_new_init (RSPAMD_MILTER_RCODE_TEMPFAIL, @@ -1638,7 +1644,8 @@ cleanup: } void -rspamd_milter_init_library (const gchar *spam_header, void *sessions_cache) +rspamd_milter_init_library (const gchar *spam_header, void *sessions_cache, + gboolean discard_on_reject) { if (milter_ctx) { g_free (milter_ctx->spam_header); @@ -1655,6 +1662,7 @@ rspamd_milter_init_library (const gchar *spam_header, void *sessions_cache) } milter_ctx->sessions_cache = sessions_cache; + milter_ctx->discard_on_reject = discard_on_reject; } rspamd_mempool_t * diff --git a/src/libserver/milter.h b/src/libserver/milter.h index 8550ecc97..2a07cef99 100644 --- a/src/libserver/milter.h +++ b/src/libserver/milter.h @@ -149,7 +149,7 @@ void rspamd_milter_send_task_results (struct rspamd_milter_session *session, * @param spam_header spam header name (must NOT be NULL) */ void rspamd_milter_init_library (const gchar *spam_header, - void *sessions_cache); + void *sessions_cache, gboolean discard_on_reject); /** * Returns pool for a session -- cgit v1.2.3