]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Respect Sophos/SAVDI FAIL212 REJ4 REJ1 Return Codes in antivirus.lua
authorCarsten Rosenberg <c.rosenberg@heinlein-support.de>
Tue, 20 Mar 2018 13:37:17 +0000 (14:37 +0100)
committerCarsten Rosenberg <c.rosenberg@heinlein-support.de>
Tue, 20 Mar 2018 13:37:17 +0000 (14:37 +0100)
src/plugins/lua/antivirus.lua

index 4b69b88504b11456d6415e4246407f19513562eb..46f556c1d22aa7ace2581baf9e8010d10470a223 100644 (file)
@@ -531,6 +531,9 @@ local function sophos_check(task, rule)
     local bye = 'BYE\n'
 
     local function sophos_callback(err, data, conn)
+      rspamd_logger.errx(task, 'err: %s', err)
+      rspamd_logger.errx(task, 'data: %s', tostring(data))
+
       if err then
         if err == 'IO timeout' then
           if retransmits > 0 then
@@ -554,6 +557,7 @@ local function sophos_check(task, rule)
       else
         upstream:ok()
         data = tostring(data)
+        rspamd_logger.errx(task, 'data2: %s', data)
         local vname = string.match(data, 'VIRUS (%S+) ')
         if vname then
           yield_result(task, rule, vname)
@@ -564,6 +568,20 @@ local function sophos_check(task, rule)
               rspamd_logger.infox(task, '%s [%s]: message is clean', rule['symbol'], rule['type'])
             end
             save_av_cache(task, rule, 'OK')
+          elseif string.find(data, 'FAIL 0212') then
+            if rule['savdi_report_encrypted'] then
+              rspamd_logger.infox(task, 'Message is ENCRYPTED (0212 SOPHOS_SAVI_ERROR_FILE_ENCRYPTED): %s', data)
+              yield_result(task, rule, "SAVDI_FILE_ENCRYPTED")
+              save_av_cache(task, rule, "SAVDI_FILE_ENCRYPTED")
+            end
+          elseif string.find(data, 'REJ 4') then
+            if rule['savdi_report_oversize'] then
+              rspamd_logger.infox(task, 'Message is OVERSIZED (SSSP reject code 4): %s', data)
+              yield_result(task, rule, "SAVDI_FILE_OVERSIZED")
+              save_av_cache(task, rule, "SAVDI_FILE_OVERSIZED")
+            end
+          elseif string.find(data, 'REJ 1') then
+            rspamd_logger.errx(task, 'SAVDI (Protocol error (REJ 1)): %s', data)
           elseif string.find(data, 'ACC') or string.find(data, 'OK SSSP') then
             conn:add_read(sophos_callback)
           else
@@ -866,4 +884,3 @@ if opts and type(opts) == 'table' then
     lua_util.disable_module(N, 'config')
   end
 end
-