commit 622bad3: [Minor] Some more additions to least actions processing logic
Vsevolod Stakhov
vsevolod at highsecure.ru
Mon Apr 29 11:35:03 UTC 2019
Author: Vsevolod Stakhov
Date: 2019-04-29 12:27:48 +0100
URL: https://github.com/rspamd/rspamd/commit/622bad3d8a52fc810070bb000025c642e5a0695f (HEAD -> master)
[Minor] Some more additions to least actions processing logic
---
src/libmime/filter.c | 41 ++++++++++++++++++++++++++++++++++++-----
src/libserver/cfg_file.h | 10 +++++-----
2 files changed, 41 insertions(+), 10 deletions(-)
diff --git a/src/libmime/filter.c b/src/libmime/filter.c
index a454cb8df..3550370ed 100644
--- a/src/libmime/filter.c
+++ b/src/libmime/filter.c
@@ -495,7 +495,7 @@ rspamd_check_action_metric (struct rspamd_task *task)
{
struct rspamd_action_result *action_lim,
*noaction = NULL;
- struct rspamd_action *selected_action = NULL;
+ struct rspamd_action *selected_action = NULL, *least_action = NULL;
struct rspamd_passthrough_result *pr;
double max_score = -(G_MAXDOUBLE), sc;
int i;
@@ -522,12 +522,32 @@ rspamd_check_action_metric (struct rspamd_task *task)
}
else {
seen_least = true;
+ least_action = selected_action;
if (isnan (sc)) {
- sc = selected_action->threshold;
- }
- max_score = sc;
+ if (selected_action->flags & RSPAMD_ACTION_NO_THRESHOLD) {
+ /*
+ * In this case, we have a passthrough action that
+ * is `least` action, however, there is no threshold
+ * on it.
+ *
+ * Hence, we imply the following logic:
+ *
+ * - we leave score unchanged
+ * - we apply passthrough no threshold action unless
+ * score based action *is not* reject, otherwise
+ * we apply reject action
+ */
+ }
+ else {
+ sc = selected_action->threshold;
+ max_score = sc;
+ }
+ }
+ else {
+ max_score = sc;
+ }
}
}
}
@@ -563,7 +583,18 @@ rspamd_check_action_metric (struct rspamd_task *task)
if (selected_action) {
if (seen_least) {
- mres->score = MAX (max_score, mres->score);
+
+ if (least_action->flags & RSPAMD_ACTION_NO_THRESHOLD) {
+ if (selected_action->action_type != METRIC_ACTION_REJECT &&
+ selected_action->action_type != METRIC_ACTION_DISCARD) {
+ /* Override score based action with least action */
+ selected_action = least_action;
+ }
+ }
+ else {
+ /* Adjust score if needed */
+ mres->score = MAX (max_score, mres->score);
+ }
}
return selected_action;
diff --git a/src/libserver/cfg_file.h b/src/libserver/cfg_file.h
index fc61eae6b..278a0a466 100644
--- a/src/libserver/cfg_file.h
+++ b/src/libserver/cfg_file.h
@@ -285,11 +285,11 @@ enum rspamd_action_type {
};
enum rspamd_action_flags {
- RSPAMD_ACTION_NORMAL = 0,
- RSPAMD_ACTION_NO_THRESHOLD = (1u << 0),
- RSPAMD_ACTION_THRESHOLD_ONLY = (1u << 1),
- RSPAMD_ACTION_HAM = (1u << 2),
- RSPAMD_ACTION_MILTER = (1u << 3),
+ RSPAMD_ACTION_NORMAL = 0u,
+ RSPAMD_ACTION_NO_THRESHOLD = (1u << 0u),
+ RSPAMD_ACTION_THRESHOLD_ONLY = (1u << 1u),
+ RSPAMD_ACTION_HAM = (1u << 2u),
+ RSPAMD_ACTION_MILTER = (1u << 3u),
};
More information about the Commits
mailing list