From: Vsevolod Stakhov Date: Mon, 23 Aug 2021 13:12:40 +0000 (+0100) Subject: [Fix] Spf: Do not parse non TXT DNS replies as TXT replies X-Git-Tag: 3.1~233 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=fdfcfdc36a98809b98a3c3ca4cf9931e732b0710;p=rspamd.git [Fix] Spf: Do not parse non TXT DNS replies as TXT replies --- diff --git a/src/libserver/spf.c b/src/libserver/spf.c index 999423c7d..5261ad01f 100644 --- a/src/libserver/spf.c +++ b/src/libserver/spf.c @@ -783,26 +783,34 @@ spf_process_txt_record (struct spf_record *rec, struct spf_resolved_element *res * or incorrect records (e.g. spf2 records) */ LL_FOREACH (reply->entries, elt) { - if (strncmp (elt->content.txt.data, "v=spf1", sizeof ("v=spf1") - 1) + if (elt->type == RDNS_REQUEST_TXT) { + if (strncmp(elt->content.txt.data, "v=spf1", sizeof("v=spf1") - 1) == 0) { - selected = elt; - rspamd_mempool_set_variable (rec->task->task_pool, - RSPAMD_MEMPOOL_SPF_RECORD, - rspamd_mempool_strdup (rec->task->task_pool, - elt->content.txt.data), NULL); - break; + selected = elt; + rspamd_mempool_set_variable(rec->task->task_pool, + RSPAMD_MEMPOOL_SPF_RECORD, + rspamd_mempool_strdup (rec->task->task_pool, + elt->content.txt.data), NULL); + break; + } } } if (!selected) { LL_FOREACH (reply->entries, elt) { - if (start_spf_parse (rec, resolved, elt->content.txt.data)) { - ret = TRUE; - rspamd_mempool_set_variable (rec->task->task_pool, - RSPAMD_MEMPOOL_SPF_RECORD, - rspamd_mempool_strdup (rec->task->task_pool, - elt->content.txt.data), NULL); - break; + /* + * Rubbish spf record? Let's still try to process it, but merely for + * TXT RRs + */ + if (elt->type == RDNS_REQUEST_TXT) { + if (start_spf_parse(rec, resolved, elt->content.txt.data)) { + ret = TRUE; + rspamd_mempool_set_variable(rec->task->task_pool, + RSPAMD_MEMPOOL_SPF_RECORD, + rspamd_mempool_strdup (rec->task->task_pool, + elt->content.txt.data), NULL); + break; + } } } }