From: Vsevolod Stakhov Date: Mon, 9 Nov 2015 15:29:28 +0000 (+0000) Subject: Fix redirect as specified in RFC X-Git-Tag: 1.1.0~601 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fb45d4885fa4e3d6873491501793eb1e38f519e5;p=thirdparty%2Frspamd.git Fix redirect as specified in RFC --- 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) {