From: Marc.Haber-lists@gmx.de (Marc Haber) Date: Sat, 01 Aug 1998 13:05:12 GMT I am using a virus scanner program that is invoked by a pipe, scans the mail and re-invokes Exim to do the delivery. The pipe is invoking a perl script that tries to unpack and MIME, zip and other archives and then applies the McAfee scanner on the results. The Exim configuration to handle this was created by Sven Paulus . The relevant bits are shown below. The virus scanner scans the mail and re-delivers it with exim -oMr scanned-ok to stop the mail from being scanned a second time. There was a bug in Exim prior to release 2.00 that stopped this working. ###################################################################### # TRANPORTS CONFIGURATION # ###################################################################### # ORDER DOES NOT MATTER # # Only one appropriate transport is called for each delivery. # ###################################################################### virscan: driver = pipe bsmtp = all batch_max = 32767 bsmtp_helo = true command = "/usr/local/virscan/bin/scanmail \ $sender_host_address /var/log/exim_virscan 1" current_directory = "/tmp" from_hack = false freeze_exec_fail = false group = virscan ignore_status = false log_defer_output = false log_fail_output = false log_output = true prefix = return_output = false return_path_add = false timeout = 6h umask = 022 use_shell = false user = virscan ###################################################################### # DIRECTORS CONFIGURATION # # Specifies how local addresses are handled # ###################################################################### # ORDER DOES MATTER # # A local address is passed to each in turn until it is accepted. # ###################################################################### # Follows system_aliases and userforward directors, but precedes localuser. vircheck: condition = "${if or {{eq {$received_protocol}{no-attachment}} \ {eq {$received_protocol}{local-not-scanned}} \ {eq {$received_protocol}{scanned-ok}} \ {match {$sender_host_address}{^192\.168\.10\.}}} \ {0}{1}}" driver = localuser transport = virscan ###################################################################### # ROUTERS CONFIGURATION # # Specifies how remote addresses are handled # ###################################################################### # ORDER DOES MATTER # # A remote address is passed to each in turn until it is accepted. # ###################################################################### # The first router routes everything to the scanner unless the message # has previously been scanned. vircheck: condition = "${if eq {$received_protocol}{scanned-ok} {0}{1}}" driver = domainlist route_list = "*" transport = virscan