]> source.dussan.org Git - rspamd.git/commitdiff
once_received.lua: Fix indentation & add exclusion for authenticated users
authorAndrew Lewis <nerf@judo.za.org>
Fri, 13 Feb 2015 09:24:41 +0000 (11:24 +0200)
committerAndrew Lewis <nerf@judo.za.org>
Fri, 13 Feb 2015 09:44:05 +0000 (11:44 +0200)
Conflicts:
src/plugins/lua/once_received.lua

src/plugins/lua/once_received.lua

index 3631aaacc8d5557c2065fa2d458dd3e65ab01ccb..6e12435456d8b7acd1782a2b9f5ca2e757552349 100644 (file)
@@ -8,88 +8,91 @@ local good_hosts = {}
 local rspamd_logger = require "rspamd_logger"
 
 local function check_quantity_received (task)
-       local function recv_dns_cb(resolver, to_resolve, results, err)
-               task:inc_dns_req()
-               if not results then
-                       task:insert_result(symbol_strict, 1)
-               else
-                       rspamd_logger.info(string.format('SMTP resolver failed to resolve: %s is %s', to_resolve, results[1]))
-                       local i = true
-                       for _,h in ipairs(bad_hosts) do
-                               if string.find(results[1], h) then
-                                       -- Check for good hostname
-                                       if good_hosts then
-                                               for _,gh in ipairs(good_hosts) do
-                                                       if string.find(results[1], gh) then
-                                                               i = false
-                                                               break
-                                                       end
-                                               end
-                                       end
-                                       if i then
-                                               task:insert_result(symbol_strict, 1, h)
-                                               return
-                                       end
-                               end
-                       end
-               end
-       end
+  local function recv_dns_cb(resolver, to_resolve, results, err)
+    task:inc_dns_req()
+    if not results then
+      task:insert_result(symbol_strict, 1)
+    else
+      rspamd_logger.info(string.format('SMTP resolver failed to resolve: %s is %s', to_resolve, results[1]))
+      local i = true
+      for _,h in ipairs(bad_hosts) do
+        if string.find(results[1], h) then
+          -- Check for good hostname
+          if good_hosts then
+            for _,gh in ipairs(good_hosts) do
+              if string.find(results[1], gh) then
+                i = false
+                break
+              end
+            end
+          end
+          if i then
+            task:insert_result(symbol_strict, 1, h)
+            return
+          end
+        end
+      end
+    end
+  end
 
-       local recvh = task:get_received_headers()
-       if table.maxn(recvh) <= 1 then
-               task:insert_result(symbol, 1)
-               -- Strict checks
-               if symbol_strict then
-                       local r = recvh[1]
+  if task:get_user() ~= nil then
+    return
+  end
+  local recvh = task:get_received_headers()
+  if table.maxn(recvh) <= 1 then
+    task:insert_result(symbol, 1)
+    -- Strict checks
+    if symbol_strict then
+      local r = recvh[1]
             if not r then
                 return
             end
-                       -- Unresolved host
-                       if not r['real_hostname'] or string.lower(r['real_hostname']) == 'unknown' or 
-                               string.match(r['real_hostname'], '^%d+%.%d+%.%d+%.%d+$') then
-                               
-                               if r['real_ip'] then
-                                       -- Try to resolve it again
-                                       task:get_resolver():resolve_ptr(task:get_session(), task:get_mempool(), 
-                                               tostring(r['real_ip']), recv_dns_cb)
-                               else
-                                       task:insert_result(symbol_strict, 1)
-                               end
-                   return
-                       end
+      -- Unresolved host
+      if not r['real_hostname'] or string.lower(r['real_hostname']) == 'unknown' or 
+        string.match(r['real_hostname'], '^%d+%.%d+%.%d+%.%d+$') then
+        
+        if r['real_ip'] and r['real_ip']:is_valid() then
+          -- Try to resolve it again
+          task:get_resolver():resolve_ptr(task:get_session(), task:get_mempool(), 
+            r['real_ip']:to_string(), recv_dns_cb)
+        else
+          task:insert_result(symbol_strict, 1)
+        end
+        return
+      end
 
-                       local i = true
-                       local hn = string.lower(r['real_hostname'])
+      local i = true
+      local hn = string.lower(r['real_hostname'])
 
-                       for _,h in ipairs(bad_hosts) do
-                               if string.find(hn, h) then
-                                       -- Check for good hostname
-                                       if good_hosts then
-                                               for _,gh in ipairs(good_hosts) do
-                                                       if string.find(hn, gh) then
-                                                               i = false
-                                                               break
-                                                       end
-                                               end
-                                       end
-                                       if i then
-                                               task:insert_result(symbol_strict, 1, h)
-                                               return
-                                       end
-                               end
-                       end
-               end
-       end
+      for _,h in ipairs(bad_hosts) do
+        if string.find(hn, h) then
+          -- Check for good hostname
+          if good_hosts then
+            for _,gh in ipairs(good_hosts) do
+              if string.find(hn, gh) then
+                i = false
+                break
+              end
+            end
+          end
+          if i then
+            task:insert_result(symbol_strict, 1, h)
+            return
+          end
+        end
+      end
+    end
+  end
 end
 
 -- Registration
 if type(rspamd_config.get_api_version) ~= 'nil' then
-       if rspamd_config:get_api_version() >= 1 then
-               rspamd_config:register_module_option('once_received', 'symbol', 'string')
-               rspamd_config:register_module_option('once_received', 'symbol_strict', 'string')
-               rspamd_config:register_module_option('once_received', 'bad_host', 'string')
-               rspamd_config:register_module_option('once_received', 'good_host', 'string')
-       end
+  if rspamd_config:get_api_version() >= 1 then
+    rspamd_config:register_module_option('once_received', 'symbol', 'string')
+    rspamd_config:register_module_option('once_received', 'symbol_strict', 'string')
+    rspamd_config:register_module_option('once_received', 'bad_host', 'string')
+    rspamd_config:register_module_option('once_received', 'good_host', 'string')
+  end
 end
 
 -- Configuration
@@ -98,28 +101,28 @@ if opts then
     if opts['symbol'] then
         local symbol = opts['symbol']
 
-           for n,v in pairs(opts) do
-                       if n == 'symbol_strict' then
-                               symbol_strict = v
-                               if type(rspamd_config.get_api_version) ~= 'nil' then
-                                       rspamd_config:register_virtual_symbol(symbol_strict, 1.0)
-                               end
-                       elseif n == 'bad_host' then
-                               if type(v) == 'string' then
-                               bad_hosts[1] = v
-                               else
-                                       bad_hosts = v
-                               end
-                       elseif n == 'good_host' then
-                               if type(v) == 'string' then
-                               good_hosts[1] = v
-                               else
-                                       good_hosts = v
-                               end
-                   end
-           end
+      for n,v in pairs(opts) do
+      if n == 'symbol_strict' then
+        symbol_strict = v
+        if type(rspamd_config.get_api_version) ~= 'nil' then
+          rspamd_config:register_virtual_symbol(symbol_strict, 1.0)
+        end
+      elseif n == 'bad_host' then
+        if type(v) == 'string' then
+            bad_hosts[1] = v
+        else
+          bad_hosts = v
+        end
+      elseif n == 'good_host' then
+        if type(v) == 'string' then
+            good_hosts[1] = v
+        else
+          good_hosts = v
+        end
+        end
+      end
 
-               -- Register symbol's callback
-               rspamd_config:register_symbol(symbol, 1.0, check_quantity_received)
-       end
+    -- Register symbol's callback
+    rspamd_config:register_symbol(symbol, 1.0, check_quantity_received)
+  end
 end