]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Fix issues found
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 2 Dec 2019 14:02:44 +0000 (14:02 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 2 Dec 2019 14:02:44 +0000 (14:02 +0000)
src/libserver/spf.c
src/lua/lua_spf.c
src/plugins/lua/spf.lua

index 5fac43aa1bce2c837c1303fa9e80ebd4fe80a1bc..ec8decb50ad697d1bb0b45f81822115becdebe4f 100644 (file)
@@ -2436,11 +2436,10 @@ rspamd_spf_resolve (struct rspamd_task *task, spf_cb_t callback,
 
                if (cached) {
                        cached->flags |= RSPAMD_SPF_FLAG_CACHED;
-               }
-
-               callback (cached, task, cbdata);
+                       callback (cached, task, cbdata);
 
-               return TRUE;
+                       return TRUE;
+               }
        }
 
 
index e6dc579d6876758f70bf4ab63151aa7ddc3c6b50..333f51bbf6175e987be562f01991f9b0fdd7eee6 100644 (file)
@@ -54,6 +54,7 @@ static luaL_reg rspamd_spf_record_m[] = {
 struct rspamd_lua_spf_cbdata {
        struct rspamd_task *task;
        lua_State *L;
+       struct rspamd_symcache_item *item;
        gint cbref;
        ref_entry_t ref;
 };
@@ -153,6 +154,10 @@ lua_spf_dtor (struct rspamd_lua_spf_cbdata *cbd)
 {
        if (cbd) {
                luaL_unref (cbd->L, LUA_REGISTRYINDEX, cbd->cbref);
+               if (cbd->item) {
+                       rspamd_symcache_item_async_dec_check (cbd->task, cbd->item,
+                                       "lua_spf");
+               }
        }
 }
 
@@ -162,26 +167,36 @@ spf_lua_lib_callback (struct spf_resolved *record, struct rspamd_task *task,
 {
        struct rspamd_lua_spf_cbdata *cbd = (struct rspamd_lua_spf_cbdata *)ud;
 
-       if (record && (record->flags & RSPAMD_SPF_RESOLVED_NA)) {
-               lua_spf_push_result (cbd, RSPAMD_SPF_RESOLVED_NA, record,
-                               "no record found");
-       }
-       else if (record && record->elts->len == 0 && (record->flags & RSPAMD_SPF_RESOLVED_TEMP_FAILED)) {
-               lua_spf_push_result (cbd, RSPAMD_SPF_RESOLVED_TEMP_FAILED, record,
-                               "temporary resolution error");
-       }
-       else if (record && record->elts->len == 0 && (record->flags & RSPAMD_SPF_RESOLVED_PERM_FAILED)) {
-               lua_spf_push_result (cbd, RSPAMD_SPF_RESOLVED_PERM_FAILED, record,
-                               "permanent resolution error");
-       }
-       else if (record && record->elts->len == 0) {
-               lua_spf_push_result (cbd, RSPAMD_SPF_RESOLVED_PERM_FAILED, record,
-                               "record is empty");
+       if (record) {
+               if ((record->flags & RSPAMD_SPF_RESOLVED_NA)) {
+                       lua_spf_push_result (cbd, RSPAMD_SPF_RESOLVED_NA, record,
+                                       "no record found");
+               }
+               else if (record->elts->len == 0 && (record->flags & RSPAMD_SPF_RESOLVED_TEMP_FAILED)) {
+                       lua_spf_push_result (cbd, RSPAMD_SPF_RESOLVED_TEMP_FAILED, record,
+                                       "temporary resolution error");
+               }
+               else if (record->elts->len == 0 && (record->flags & RSPAMD_SPF_RESOLVED_PERM_FAILED)) {
+                       lua_spf_push_result (cbd, RSPAMD_SPF_RESOLVED_PERM_FAILED, record,
+                                       "permanent resolution error");
+               }
+               else if (record->elts->len == 0) {
+                       lua_spf_push_result (cbd, RSPAMD_SPF_RESOLVED_PERM_FAILED, record,
+                                       "record is empty");
+               }
+               else if (record->domain) {
+                       spf_record_ref (record);
+                       lua_spf_push_result (cbd, record->flags, record, NULL);
+                       spf_record_unref (record);
+               }
+               else {
+                       lua_spf_push_result (cbd, RSPAMD_SPF_RESOLVED_PERM_FAILED, record,
+                                       "internal error: non empty record for no domain");
+               }
        }
-       else if (record && record->domain) {
-               spf_record_ref (record);
-               lua_spf_push_result (cbd, record->flags, record, NULL);
-               spf_record_unref (record);
+       else {
+               lua_spf_push_result (cbd, RSPAMD_SPF_RESOLVED_PERM_FAILED, NULL,
+                               "internal error: no record");
        }
 
        REF_RELEASE (cbd);
@@ -209,6 +224,8 @@ lua_spf_resolve (lua_State * L)
                cbd->cbref = luaL_ref (L, LUA_REGISTRYINDEX);
                /* TODO: make it as an optional parameter */
                spf_cred = rspamd_spf_get_cred (task);
+               cbd->item = rspamd_symcache_get_cur_item (task);
+               rspamd_symcache_item_async_inc (task, cbd->item, "lua_spf");
                REF_INIT_RETAIN (cbd, lua_spf_dtor);
 
                if (!rspamd_spf_resolve (task, spf_lua_lib_callback, cbd, spf_cred)) {
index 26a47fdd8f6eb4cc8903ac1536e8717eabdf85fa..2e4492b33899bc003c42711ac09fc4fbe49521de 100644 (file)
@@ -101,8 +101,15 @@ local function spf_check_callback(task)
   end
 
   local function spf_resolved_cb(record, flags, err)
+    lua_util.debugm(N, task, 'got spf results: %s flags, %s err',
+        flags, err)
     if record then
-      local result, flag_or_policy, error_or_addr = record:check_ip(task:get_from_ip())
+      local ip = task:get_from_ip()
+      local result, flag_or_policy, error_or_addr = record:check_ip(ip)
+
+      lua_util.debugm(N, task,
+          'checked ip %s: result=%s, flag_or_policy=%s, error_or_addr=%s',
+          ip, flags, err, error_or_addr)
 
       if result then
         local sym,code = policy_decode(flag_or_policy)