]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] lua_scanners - icap - fix result caching
authorCarsten Rosenberg <c.rosenberg@heinlein-support.de>
Tue, 2 Nov 2021 20:15:03 +0000 (21:15 +0100)
committerCarsten Rosenberg <c.rosenberg@heinlein-support.de>
Tue, 2 Nov 2021 20:15:03 +0000 (21:15 +0100)
lualib/lua_scanners/icap.lua

index 0eb5f8583e9b36a27d5cb35dc89c6c8068c46971..414b81c559ad55b98b5b6cec0b91fba5484c52b9 100644 (file)
@@ -463,8 +463,6 @@ local function icap_check(task, content, digest, rule, maybe_part)
           common.save_cache(task, digest, rule, threat_string, rule.default_score, maybe_part)
           return true
         else
-          common.save_cache(task, digest, rule, 'OK', 0, maybe_part)
-          common.log_clean(task, rule)
           return false
         end
       end
@@ -479,7 +477,14 @@ local function icap_check(task, content, digest, rule, maybe_part)
           local icap_http_headers = result_header_table(result) or {}
           -- Find HTTP/[12].x [234]xx response
           if icap_http_headers.http and string.find(icap_http_headers.http, 'HTTP%/[12]%.. [234]%d%d') then
-            icap_parse_result(icap_http_headers)
+            local icap_http_header_result = icap_parse_result(icap_http_headers)
+            if icap_http_header_result then
+              -- Threat found - close connection
+              connection:close()
+            else
+              common.save_cache(task, digest, rule, 'OK', 0, maybe_part)
+              common.log_clean(task, rule)
+            end
           else
             rspamd_logger.errx(task, '%s: unhandled response |%s|',
               rule.log_prefix, string.gsub(result, "\r\n", ", "))
@@ -503,14 +508,19 @@ local function icap_check(task, content, digest, rule, maybe_part)
             if icap_header_result then
               -- Threat found - close connection
               connection:close()
-            elseif not icap_header_result 
-              and rule.use_http_result_header 
+            elseif not icap_header_result
+              and rule.use_http_result_header
+              and icap_headers.Encapsulated
               and not string.find(icap_headers.Encapsulated, 'null%-body=0') 
               then
               -- Try to read encapsulated HTTP Headers
               lua_util.debugm(rule.name, task, '%s: no ICAP virus header found - try HTTP headers',
                 rule.log_prefix)
               connection:add_read(icap_r_respond_http_cb, '\r\n\r\n')
+            else
+              connection:close()
+              common.save_cache(task, digest, rule, 'OK', 0, maybe_part)
+              common.log_clean(task, rule)
             end
           elseif icap_headers.icap and string.find(icap_headers.icap, 'ICAP%/1%.. [45]%d%d') then
             -- Find ICAP/1.x 5/4xx response