]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Fix redirect as specified in RFC
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 9 Nov 2015 15:29:28 +0000 (15:29 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 9 Nov 2015 15:29:28 +0000 (15:29 +0000)
src/libserver/spf.c

index 36b513707320c337f905b7967307361e29dfd5a7..1263df1c72e8209b6d8d8366b08ca7e825144568 100644 (file)
@@ -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) {