aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2017-07-03 08:52:31 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2017-07-03 08:52:31 +0100
commit6a2fcfc30cb8b0051c10f6e5794565e3176dbe61 (patch)
tree8b4c3d867c6b53edc8e892b9c6c31cf788ec83e7
parent6cd82ee7c36488ee629f062e1afa2f9219cef1b1 (diff)
downloadrspamd-6a2fcfc30cb8b0051c10f6e5794565e3176dbe61.tar.gz
rspamd-6a2fcfc30cb8b0051c10f6e5794565e3176dbe61.zip
[Fix] Do not cache SPF records with macros
-rw-r--r--src/libserver/spf.c6
-rw-r--r--src/plugins/spf.c5
2 files changed, 10 insertions, 1 deletions
diff --git a/src/libserver/spf.c b/src/libserver/spf.c
index e8aa9cbab..a3a1b95f8 100644
--- a/src/libserver/spf.c
+++ b/src/libserver/spf.c
@@ -1580,6 +1580,12 @@ expand_spf_macro (struct spf_record *rec, struct spf_resolved_element *resolved,
new = rspamd_mempool_alloc (task->task_pool, len + 1);
+ /* Reduce TTL to avoid caching of records with macros */
+ if (rec->ttl != 0) {
+ rec->ttl = 0;
+ msg_debug_spf ("disable SPF caching as there is macro expansion");
+ }
+
c = new;
p = begin;
state = 0;
diff --git a/src/plugins/spf.c b/src/plugins/spf.c
index 275f937ce..097df7329 100644
--- a/src/plugins/spf.c
+++ b/src/plugins/spf.c
@@ -529,7 +529,10 @@ spf_plugin_callback (struct spf_resolved *record, struct rspamd_task *task,
l = spf_record_ref (record);
- if (!record->temp_failed && !record->perm_failed && !record->na) {
+ if (record->ttl > 0 &&
+ !record->temp_failed &&
+ !record->perm_failed &&
+ !record->na) {
rspamd_lru_hash_insert (spf_module_ctx->spf_hash,
record->domain, l,
task->tv.tv_sec, record->ttl);