Browse Source

[Fix] Spf: Do not parse non TXT DNS replies as TXT replies

tags/3.1
Vsevolod Stakhov 2 years ago
parent
commit
fdfcfdc36a
1 changed files with 22 additions and 14 deletions
  1. 22
    14
      src/libserver/spf.c

+ 22
- 14
src/libserver/spf.c View File

@@ -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;
}
}
}
}

Loading…
Cancel
Save