[Minor] Fix SPF PERMFAIL/DNSFAIL behaviour on failed redirect

This commit is contained in:
Andrew Lewis 2016-09-26 11:39:25 +02:00
parent aa4e6f0e09
commit 18b3d06674
4 changed files with 15 additions and 3 deletions

View File

@ -332,6 +332,10 @@ rspamd_spf_process_reference (struct spf_resolved *target,
target->temp_failed = TRUE;
continue;
}
if (cur->flags & RSPAMD_SPF_FLAG_PERMFAIL) {
target->perm_failed = TRUE;
continue;
}
if (cur->flags & RSPAMD_SPF_FLAG_NA) {
target->na = TRUE;
continue;
@ -734,7 +738,7 @@ spf_record_dns_callback (struct rdns_reply *reply, gpointer arg)
task->message_id,
cb->rec->sender_domain,
cb->resolved->cur_domain);
cb->addr->flags &= ~RSPAMD_SPF_FLAG_PARSED;
cb->addr->flags |= RSPAMD_SPF_FLAG_PERMFAIL;
break;
case SPF_RESOLVE_INCLUDE:
msg_debug_spf (

View File

@ -39,6 +39,7 @@ typedef enum spf_action_e {
#define RSPAMD_SPF_FLAG_REDIRECT (1 << 7)
#define RSPAMD_SPF_FLAG_TEMPFAIL (1 << 8)
#define RSPAMD_SPF_FLAG_NA (1 << 9)
#define RSPAMD_SPF_FLAG_PERMFAIL (1 << 10)
struct spf_addr {
guchar addr6[sizeof (struct in6_addr)];
@ -61,6 +62,7 @@ struct spf_resolved {
guint ttl;
gboolean temp_failed;
gboolean na;
gboolean perm_failed;
GArray *elts; /* Flat list of struct spf_addr */
ref_entry_t ref; /* Refcounting */
};

View File

@ -478,6 +478,12 @@ spf_plugin_callback (struct spf_resolved *record, struct rspamd_task *task,
1,
NULL);
}
else if (record && record->perm_failed) {
rspamd_task_insert_result (task,
spf_module_ctx->symbol_permfail,
1,
NULL);
}
else if (record && record->elts->len == 0) {
rspamd_task_insert_result (task,
spf_module_ctx->symbol_permfail,

View File

@ -102,10 +102,10 @@ SPF NA NXDOMAIN
... -i 8.8.8.8 -F x@zzzzaaaa
Check Rspamc ${result} R_SPF_NA
SPF DNSFAIL UNRESOLVEABLE REDIRECT
SPF PERMFAIL UNRESOLVEABLE REDIRECT
${result} = Scan Message With Rspamc ${TESTDIR}/messages/dmarc/bad_dkim1.eml
... -i 8.8.8.8 -F x@cacophony.za.org
Check Rspamc ${result} R_SPF_DNSFAIL
Check Rspamc ${result} R_SPF_PERMFAIL
SPF PERMFAIL
${result} = Scan Message With Rspamc ${TESTDIR}/messages/dmarc/bad_dkim1.eml