$av_failed variable set when av_scanner deferred
authorPhil Pennock <pdp@exim.org>
Sat, 27 Aug 2011 23:01:01 +0000 (16:01 -0700)
committerPhil Pennock <pdp@exim.org>
Sat, 27 Aug 2011 23:01:01 +0000 (16:01 -0700)
Patch from John Horne.
Fixes bug 1078

doc/doc-docbook/spec.xfpt
doc/doc-txt/ChangeLog
doc/doc-txt/NewStuff
src/src/expand.c
src/src/globals.c
src/src/globals.h
src/src/malware.c

index 1092cab54d843f6f5ed3ad72e8291fe84f3dd825..aa4be53323c8739ff79748a663faf8c87cbfad01 100644 (file)
@@ -10610,6 +10610,15 @@ is empty and &$authentication_failed$& is set to &"1"&). Failure includes any
 negative response to an AUTH command, including (for example) an attempt to use
 an undefined mechanism.
 
 negative response to an AUTH command, including (for example) an attempt to use
 an undefined mechanism.
 
+.new
+.vitem &$av_failed$&
+.cindex "content scanning" "AV scanner failure"
+This variable is available when Exim is compiled with the content-scanning
+extension. It is set to &"0"& by default, but will be set to &"1"& if any
+problem occurs with the virus scanner (specified by &%av_scanner%&) during
+the ACL malware condition.
+.wen
+
 .vitem &$body_linecount$&
 .cindex "message body" "line count"
 .cindex "body of message" "line count"
 .vitem &$body_linecount$&
 .cindex "message body" "line count"
 .cindex "body of message" "line count"
index bb182c9dd938723eff068b5ccd142c419154d0cf..6181dd2d296d5e0c8fe2474f484ba87f83389fbb 100644 (file)
@@ -97,6 +97,10 @@ PP/03 Implement SSL-on-connect outbound with protocol=smtps on smtp transport.
 
 PP/04 Use .dylib instead of .so for dynamic library loading on MacOS.
 
 
 PP/04 Use .dylib instead of .so for dynamic library loading on MacOS.
 
+PP/05 Variable $av_failed, true if the AV scanner deferred.
+      Patch from John Horne.
+      Bugzilla 1078.
+
 
 Exim version 4.76
 -----------------
 
 Exim version 4.76
 -----------------
index eb1e1397e604dfbde75ae1f94efb1a76fbb9a8d3..bf247e67edce2860117612729b1cff417d8c7a0b 100644 (file)
@@ -15,6 +15,9 @@ Version 4.77
  2. The SMTP transport's protocol option may now be set to "smtps", to
     use SSL-on-connect outbound.
 
  2. The SMTP transport's protocol option may now be set to "smtps", to
     use SSL-on-connect outbound.
 
+ 3. New variable $av_failed, set true if the AV scanner deferred; ie, when
+    there is a problem talking to the AV scanner, or the AV scanner running.
+
 
 Version 4.76
 ------------
 
 Version 4.76
 ------------
index 8dfd7a8ad6048dd1100f5cf04e9fd83e71d635eb..fb6d6922b551b40bb095f0db678968807c445e38 100644 (file)
@@ -387,6 +387,9 @@ static var_entry var_table[] = {
   { "authenticated_id",    vtype_stringptr,   &authenticated_id },
   { "authenticated_sender",vtype_stringptr,   &authenticated_sender },
   { "authentication_failed",vtype_int,        &authentication_failed },
   { "authenticated_id",    vtype_stringptr,   &authenticated_id },
   { "authenticated_sender",vtype_stringptr,   &authenticated_sender },
   { "authentication_failed",vtype_int,        &authentication_failed },
+#ifdef WITH_CONTENT_SCAN
+  { "av_failed",           vtype_int,         &av_failed },
+#endif
 #ifdef EXPERIMENTAL_BRIGHTMAIL
   { "bmi_alt_location",    vtype_stringptr,   &bmi_alt_location },
   { "bmi_base64_tracker_verdict", vtype_stringptr, &bmi_base64_tracker_verdict },
 #ifdef EXPERIMENTAL_BRIGHTMAIL
   { "bmi_alt_location",    vtype_stringptr,   &bmi_alt_location },
   { "bmi_base64_tracker_verdict", vtype_stringptr, &bmi_base64_tracker_verdict },
index 92525e8d8c7fb1903f4eee7d0c8e0e3442e4b541..a5516b91d88246d8c8ec7d0daa017e66ac534e63 100644 (file)
@@ -348,6 +348,7 @@ uschar *auth_defer_user_msg    = US"";
 uschar *auth_vars[AUTH_VARS];
 int     auto_thaw              = 0;
 #ifdef WITH_CONTENT_SCAN
 uschar *auth_vars[AUTH_VARS];
 int     auto_thaw              = 0;
 #ifdef WITH_CONTENT_SCAN
+BOOL    av_failed              = FALSE;
 uschar *av_scanner             = US"sophie:/var/run/sophie";  /* AV scanner */
 #endif
 
 uschar *av_scanner             = US"sophie:/var/run/sophie";  /* AV scanner */
 #endif
 
index 4e395e81e4e4ed239e8cd7c1c69b650777b7ede4..4ed3950dfef60684b92031d810eb8e5deb0dda40 100644 (file)
@@ -184,6 +184,7 @@ extern uschar *auth_defer_user_msg;    /* Error message for user */
 extern uschar *auth_vars[];            /* $authn variables */
 extern int     auto_thaw;              /* Auto-thaw interval */
 #ifdef WITH_CONTENT_SCAN
 extern uschar *auth_vars[];            /* $authn variables */
 extern int     auto_thaw;              /* Auto-thaw interval */
 #ifdef WITH_CONTENT_SCAN
+extern BOOL    av_failed;              /* TRUE if the AV process failed */
 extern uschar *av_scanner;             /* AntiVirus scanner to use for the malware condition */
 #endif
 
 extern uschar *av_scanner;             /* AntiVirus scanner to use for the malware condition */
 #endif
 
index c7cd0bcca8581c2f1c0307d59bfba3bdbc70cc35..864564ffc926edb4d2a563db6236897779e1e66f 100644 (file)
@@ -69,17 +69,22 @@ Returns:      Exim message processing code (OK, FAIL, DEFER, ...)
 int malware(uschar **listptr) {
   uschar scan_filename[1024];
   BOOL fits;
 int malware(uschar **listptr) {
   uschar scan_filename[1024];
   BOOL fits;
+  int ret;
 
   fits = string_format(scan_filename, sizeof(scan_filename),
       CS"%s/scan/%s/%s.eml", spool_directory, message_id, message_id);
   if (!fits)
     {
 
   fits = string_format(scan_filename, sizeof(scan_filename),
       CS"%s/scan/%s/%s.eml", spool_directory, message_id, message_id);
   if (!fits)
     {
+    av_failed = TRUE;
     log_write(0, LOG_MAIN|LOG_PANIC,
         "malware filename does not fit in buffer [malware()]");
     return DEFER;
   }
 
     log_write(0, LOG_MAIN|LOG_PANIC,
         "malware filename does not fit in buffer [malware()]");
     return DEFER;
   }
 
-  return malware_internal(listptr, scan_filename, FALSE);
+  ret = malware_internal(listptr, scan_filename, FALSE);
+  if (ret == DEFER) av_failed = TRUE;
+
+  return ret;
 }
 
 
 }