]> source.dussan.org Git - rspamd.git/commitdiff
Update Hfilter 23/head
authorAlexey <AlexeySa@users.noreply.github.com>
Mon, 6 Jan 2014 21:27:45 +0000 (13:27 -0800)
committerAlexey <AlexeySa@users.noreply.github.com>
Mon, 6 Jan 2014 21:27:45 +0000 (13:27 -0800)
- Optimize and fixes for hostname check
- Some fixes for helo check

conf/lua/hfilter.lua

index b68061143705b6e210d90f5a197c5ff6fbdc64f0..967953157f52ca9847a0a6ffb49aa639272113da 100644 (file)
@@ -4,7 +4,8 @@
 -- WWW: http://homeweb.ru
 --
 
---Rating for checks_hellohost and checks_hello: 5 - very hard, 4 - hard, 3 - meduim, 2 - low, 1 - very low
+-- Weight for checks_hellohost and checks_hello: 5 - very hard, 4 - hard, 3 - meduim, 2 - low, 1 - very low.
+-- From HFILTER_HELO_* and HFILTER_HOSTNAME_* symbols the maximum weight is selected in case of their actuating.
 local checks_hellohost = {
 ['[.-]dynamic[.-]'] = 5, ['dynamic[.-][0-9]'] = 5, ['[0-9][.-]?dynamic'] = 5, 
 ['[.-]dyn[.-]'] = 5, ['dyn[.-][0-9]'] = 5, ['[0-9][.-]?dyn'] = 5, 
@@ -167,23 +168,13 @@ local function hfilter(task)
         end
     
     --HOSTNAME--
-    local r = recvh[1]
-    local hostname = false
-    local hostname_lower = false
-        if r['real_hostname'] and ( r['real_hostname'] ~= 'unknown' or not check_regexp(r['real_hostname'], '^\\d+\\.\\d+\\.\\d+\\.\\d+$') ) then
-            hostname = r['real_hostname']
-            hostname_lower = string.lower(hostname)
+    local hostname = task:get_hostname()
+        if hostname and ip and hostname == '[' .. ip .. ']' then
+            hostname = false
         end
     
     --HELO--
     local helo = task:get_helo()
-    local helo_lower = false
-        if helo then
-            helo_lower = string.lower(helo)
-        else
-            helo = false
-            helo_lower = false
-        end
     
     --MESSAGE--
     local message = task:get_message()
@@ -191,59 +182,51 @@ local function hfilter(task)
     --RULES--RULES--RULES--
 
     -- Check's HELO
-    local checks_hello_found = false
+    local weight_helo = 0
     if helo then
-        -- Regexp check HELO
+        -- Regexp check HELO (checks_hello)
         for regexp,weight in pairs(checks_hello) do
-            if check_regexp(helo_lower, regexp) then
-                task:insert_result('HFILTER_HELO_' .. weight, 1.0)
-                checks_hello_found = true
+            if check_regexp(helo, regexp) then
+                weight_helo = weight
                 break
             end
         end
-        if not checks_hello_found then
-            for regexp,weight in pairs(checks_hellohost) do
-                if check_regexp(helo_lower, regexp) then
-                    task:insert_result('HFILTER_HELO_' .. weight, 1.0)
-                    checks_hello_found = true
-                    break
+        
+        -- Regexp check HELO (checks_hellohost)
+        for regexp,weight in pairs(checks_hellohost) do
+            if check_regexp(helo, regexp) then
+                if weight > weight_helo then
+                    weight_helo = weight
                 end
+                break
             end
         end
         
         --FQDN check HELO
-        if ip then
+        if ip and helo then
             check_host(task, helo, 'HELO', ip, hostname)
         end
     end
     
-    --
-    local function check_hostname(hostname_res)
+    -- Check's HOSTNAME
+    local weight_hostname = 0
+    if hostname then
         -- Check regexp HOSTNAME
         for regexp,weight in pairs(checks_hellohost) do
-            if check_regexp(hostname_res, regexp) then
-                task:insert_result('HFILTER_HOSTNAME_' .. weight, 1.0)
+            if check_regexp(hostname, regexp) then
+                weight_hostname = weight
                 break
             end
         end
-    end
-    local function hfilter_hostname_ptr(resolver, to_resolve, results, err)
-        task:inc_dns_req()
-        if results then
-            check_hostname(results[1])
-        end
-    end
-    
-    -- Check's HOSTNAME
-    if hostname then
-        if not checks_hello_found then
-            check_hostname(hostname)
-        end
     else
         task:insert_result('HFILTER_HOSTNAME_NOPTR', 1.00)
-        if ip and not checks_hello_found then
-            task:get_resolver():resolve_ptr(task:get_session(), task:get_mempool(), ip, hfilter_hostname_ptr)
-        end
+    end
+    
+    --Insert weight's for HELO or HOSTNAME
+    if weight_helo > 0 and weight_helo >= weight_hostname then
+        task:insert_result('HFILTER_HELO_' .. weight_helo, 1.0)
+    elseif weight_hostname > 0 and weight_hostname > weight_helo then
+        task:insert_result('HFILTER_HOSTNAME_' .. weight_hostname, 1.0)
     end
 
     -- MAILFROM checks --
@@ -262,10 +245,8 @@ local function hfilter(task)
     local message_id = task:get_message_id()
     if message_id then
         local mid_split = split(message_id, '@', 0)
-        if table.maxn(mid_split) == 2 and not string.find(mid_split[2], "local") then
-            if not check_fqdn(mid_split[2]) then
-                task:insert_result('HFILTER_MID_NOT_FQDN', 1.00)
-            end
+        if table.maxn(mid_split) == 2 and not string.find(mid_split[2], "local") and not check_fqdn(mid_split[2]) then
+            task:insert_result('HFILTER_MID_NOT_FQDN', 1.00)
         end
     end