]> source.dussan.org Git - rspamd.git/commitdiff
* Fix expanding spf macros that may fail in rare cases
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Tue, 20 Jul 2010 13:12:32 +0000 (17:12 +0400)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Tue, 20 Jul 2010 13:12:32 +0000 (17:12 +0400)
src/plugins/lua/whitelist.lua
src/spf.c

index 34867bd2f04c66927a621644a4a4f20ee3bfb7af..b1cab1aa15d9e1b68a13ae385c093113f7cb308e 100644 (file)
@@ -50,7 +50,7 @@ if opts then
                end
                if symbol_from then
                        if opts['from_whitelist'] then
-                               h = rspamd_config:add_host_map (opts['from_whitelist'])
+                               h = rspamd_config:add_hash_map (opts['from_whitelist'])
                        else
                                -- No whitelist defined
                                symbol_from = nil
index 3f735457ac11ba60784499f3c0e38bf169af95f0..79a0855ea6db5de66a4ea3f8e2461c892d2ad951 100644 (file)
--- a/src/spf.c
+++ b/src/spf.c
@@ -630,6 +630,7 @@ expand_spf_macro (struct worker_task *task, struct spf_record *rec, char *begin)
 {
        char *p, *c, *new, *tmp;
        int len = 0, slen = 0, state = 0;
+       gboolean need_expand = FALSE;
 
        p = begin;
        /* Calculate length */
@@ -706,6 +707,7 @@ expand_spf_macro (struct worker_task *task, struct spf_record *rec, char *begin)
                                /* Read modifier */
                                if (*p == '}') {
                                        state = 0;
+                                       need_expand = TRUE;
                                }
                                else if (*p != 'r' && !g_ascii_isdigit (*p)) {
                                        msg_info ("unknown or unsupported spf modifier %c in %s", *p, begin);
@@ -717,7 +719,7 @@ expand_spf_macro (struct worker_task *task, struct spf_record *rec, char *begin)
                }
        }
 
-       if (slen == len) {
+       if (!need_expand) {
                /* No expansion needed */
                return begin;
        }