aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/spf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/spf.c')
-rw-r--r--src/plugins/spf.c88
1 files changed, 13 insertions, 75 deletions
diff --git a/src/plugins/spf.c b/src/plugins/spf.c
index cc52fbd0b..521fa3480 100644
--- a/src/plugins/spf.c
+++ b/src/plugins/spf.c
@@ -58,7 +58,6 @@ struct spf_ctx {
const gchar *symbol_permfail;
struct rspamd_radix_map_helper *whitelist_ip;
- rspamd_lru_hash_t *spf_hash;
gboolean check_local;
gboolean check_authed;
@@ -321,13 +320,6 @@ spf_module_config (struct rspamd_config *cfg)
else {
spf_module_ctx->symbol_permfail = DEFAULT_SYMBOL_PERMFAIL;
}
- if ((value =
- rspamd_config_get_module_opt (cfg, "spf", "spf_cache_size")) != NULL) {
- cache_size = ucl_obj_toint (value);
- }
- else {
- cache_size = DEFAULT_CACHE_SIZE;
- }
spf_library_config (ucl_obj_get_key (cfg->rcl_obj, "spf"));
@@ -390,15 +382,6 @@ spf_module_config (struct rspamd_config *cfg)
SYMBOL_TYPE_VIRTUAL,
cb_id);
- if (cache_size > 0) {
- spf_module_ctx->spf_hash = rspamd_lru_hash_new (
- cache_size,
- NULL,
- (GDestroyNotify) spf_record_unref);
- rspamd_mempool_add_destructor (cfg->cfg_pool,
- (rspamd_mempool_destruct_t)rspamd_lru_hash_destroy,
- spf_module_ctx->spf_hash);
- }
rspamd_mempool_add_destructor (cfg->cfg_pool,
(rspamd_mempool_destruct_t)rspamd_map_helper_destroy_radix,
@@ -560,16 +543,12 @@ spf_check_list (struct spf_resolved *rec, struct rspamd_task *task, gboolean cac
{
guint i;
struct spf_addr *addr;
- struct spf_ctx *spf_module_ctx = spf_get_context (task->cfg);
if (cached) {
- msg_info_task ("use cached record for %s (0x%xuL) in LRU cache for %d seconds, "
- "%d/%d elements in the cache",
+ msg_info_task ("use cached record for %s (0x%xuL) in LRU cache for %d seconds",
rec->domain,
rec->digest,
- rec->ttl - (guint)(task->task_timestamp - rec->timestamp),
- rspamd_lru_hash_size (spf_module_ctx->spf_hash),
- rspamd_lru_hash_capacity (spf_module_ctx->spf_hash));
+ rec->ttl - (guint)(task->task_timestamp - rec->timestamp));
}
for (i = 0; i < rec->elts->len; i ++) {
@@ -584,7 +563,6 @@ static void
spf_plugin_callback (struct spf_resolved *record, struct rspamd_task *task,
gpointer ud)
{
- struct spf_resolved *l = NULL;
struct rspamd_symcache_item *item = (struct rspamd_symcache_item *)ud;
struct spf_ctx *spf_module_ctx = spf_get_context (task->cfg);
@@ -613,37 +591,8 @@ spf_plugin_callback (struct spf_resolved *record, struct rspamd_task *task,
NULL);
}
else if (record && record->domain) {
-
spf_record_ref (record);
-
- if (!spf_module_ctx->spf_hash ||
- (l = rspamd_lru_hash_lookup (spf_module_ctx->spf_hash,
- record->domain, task->task_timestamp)) == NULL) {
- l = record;
-
- if (record->ttl > 0 && record->flags == 0) {
-
- if (spf_module_ctx->spf_hash) {
- rspamd_lru_hash_insert (spf_module_ctx->spf_hash,
- record->domain, spf_record_ref (l),
- record->timestamp, record->ttl);
-
- msg_info_task ("stored record for %s (0x%xuL) in LRU cache for %d seconds, "
- "%d/%d elements in the cache",
- record->domain,
- record->digest,
- record->ttl,
- rspamd_lru_hash_size (spf_module_ctx->spf_hash),
- rspamd_lru_hash_capacity (spf_module_ctx->spf_hash));
- }
- }
-
- }
-
- spf_record_ref (l);
- spf_check_list (l, task, FALSE);
- spf_record_unref (l);
-
+ spf_check_list (record, task, record->flags & RSPAMD_SPF_FLAG_CACHED);
spf_record_unref (record);
}
@@ -656,8 +605,7 @@ spf_symbol_callback (struct rspamd_task *task,
struct rspamd_symcache_item *item,
void *unused)
{
- const gchar *domain;
- struct spf_resolved *l;
+ struct rspamd_spf_cred *spf_cred;
gint *dmarc_checks;
struct spf_ctx *spf_module_ctx = spf_get_context (task->cfg);
@@ -692,29 +640,19 @@ spf_symbol_callback (struct rspamd_task *task,
return;
}
- domain = rspamd_spf_get_domain (task);
+ spf_cred = rspamd_spf_get_cred (task);
rspamd_symcache_item_async_inc (task, item, M);
- if (domain) {
- if (spf_module_ctx->spf_hash &&
- (l = rspamd_lru_hash_lookup (spf_module_ctx->spf_hash, domain,
- task->task_timestamp)) != NULL) {
- spf_record_ref (l);
- spf_check_list (l, task, TRUE);
- spf_record_unref (l);
+ if (spf_cred && spf_cred->domain) {
+ if (!rspamd_spf_resolve (task, spf_plugin_callback, item, spf_cred)) {
+ msg_info_task ("cannot make spf request for %s", spf_cred->domain);
+ rspamd_task_insert_result (task,
+ spf_module_ctx->symbol_dnsfail,
+ 1,
+ "(SPF): spf DNS fail");
}
else {
-
- if (!rspamd_spf_resolve (task, spf_plugin_callback, item)) {
- msg_info_task ("cannot make spf request for %s", domain);
- rspamd_task_insert_result (task,
- spf_module_ctx->symbol_dnsfail,
- 1,
- "(SPF): spf DNS fail");
- }
- else {
- rspamd_symcache_item_async_inc (task, item, M);
- }
+ rspamd_symcache_item_async_inc (task, item, M);
}
}