From fb45d4885fa4e3d6873491501793eb1e38f519e5 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 9 Nov 2015 15:29:28 +0000 Subject: [PATCH] Fix redirect as specified in RFC --- src/libserver/spf.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/libserver/spf.c b/src/libserver/spf.c index 36b5137073..1263df1c72 100644 --- a/src/libserver/spf.c +++ b/src/libserver/spf.c @@ -262,7 +262,7 @@ rspamd_spf_process_reference (struct spf_resolved *target, elt = g_ptr_array_index (rec->resolved, 0); } - while (elt->redirected) { + if (elt->redirected) { g_assert (elt->elts->len > 0); for (i = 0; i < elt->elts->len; i++) { @@ -284,7 +284,6 @@ rspamd_spf_process_reference (struct spf_resolved *target, relt = g_ptr_array_index (rec->resolved, cur->m.idx); msg_debug_spf ("domain %s is redirected to %s", elt->cur_domain, relt->cur_domain); - elt = relt; } for (i = 0; i < elt->elts->len; i++) { @@ -297,6 +296,11 @@ rspamd_spf_process_reference (struct spf_resolved *target, else if (cur->flags & RSPAMD_SPF_FLAG_REFRENCE) { /* Process reference */ rspamd_spf_process_reference (target, cur, rec, FALSE); + + if (cur->flags & RSPAMD_SPF_FLAG_REDIRECT) { + /* Stop on redirected domain */ + break; + } } else { if ((cur->flags & RSPAMD_SPF_FLAG_ANY) && !top) { -- 2.47.3