[Mimedefang] Bitdefender patch to mimedefang.pl
Philipp Baer
phbaer at npw.net
Sat Aug 2 11:41:01 EDT 2003
Hi,
first of all I have to emphasize that I know very, very, very little
about perl and regex (besides the very basics). I do much better with
other languages... ;)
However I've modified some functions in mimedefang.pl to support
the bitdefender virus scanner. Maybe it's useful for somebody else.
ciao, phb
--
Philipp Baer <phbaer at npw.net> [http://www.npw.net/]
gnupg-fingerprint: 16C7 84E8 5C5F C3D6 A8F1 A4DC E4CB A9A9 F5FA FF5D
-------------- next part --------------
--- mimedefang.pl.orig 2003-08-02 15:02:43.000000000 +0200
+++ mimedefang.pl 2003-08-02 17:14:14.000000000 +0200
@@ -2860,6 +2860,91 @@
}
#***********************************************************************
+# %PROCEDURE: entity_contains_virus_bdc
+# %ARGUMENTS:
+# entity -- a MIME entity
+# %RETURNS:
+# 1 if entity contains a virus as reported by Bitdefender; 0 otherwise.
+# %DESCRIPTION:
+# Runs the Bitdefender program on the entity. (http://www.bitdefender.com)
+#***********************************************************************
+sub entity_contains_virus_bdc ($) {
+
+ unless($Features{'Virus:BDC'}) {
+ md_syslog('err', "$MsgID: Bitdefender not installed on this system");
+ return (wantarray ? (1, 'not-installed', 'tempfail') : 1);
+ }
+
+ my($entity) = @_;
+ my($body) = $entity->bodyhandle;
+ if (!defined($body)) {
+ return (wantarray ? (0, 'ok', 'ok') : 0);
+ }
+
+ # Get filename
+ my($path) = $body->path;
+ if (!defined($path)) {
+ return (wantarray ? (999, 'swerr', 'tempfail') : 1);
+ }
+
+ if (! ($path =~ m+^/+)) {
+ $path = $CWD . "/" . $path;
+ }
+
+ # Run bdc
+ my($code, $category, $action) =
+ run_virus_scanner($Features{'Virus:BDC'} . " $path --all --mail 2>&1");
+ if ($action ne 'proceed') {
+ return (wantarray ? ($code, $category, $action) : $code);
+ }
+ return (wantarray ? interpret_bdc_code($code) : $code);
+}
+
+#***********************************************************************
+# %PROCEDURE: message_contains_virus_bdc
+# %ARGUMENTS:
+# Nothing
+# %RETURNS:
+# 1 if any file in the working directory contains a virus
+# %DESCRIPTION:
+# Runs the Bitdefender program on the working directory
+#***********************************************************************
+sub message_contains_virus_bdc () {
+
+ unless($Features{'Virus:BDC'}) {
+ md_syslog('err', "$MsgID: Bitdefender not installed on this system");
+ return (wantarray ? (1, 'not-installed', 'tempfail') : 1);
+ }
+
+ # Run bdc
+ my($code, $category, $action) =
+ run_virus_scanner($Features{'Virus:BDC'} . " $CWD/Work --all --mail 2>&1");
+ return (wantarray ? interpret_bdc_code($code) : $code);
+}
+
+sub interpret_bdc_code ($) {
+ my($code) = @_;
+
+ md_syslog('err', "$CurrentVirusScannerMessage");
+
+ # OK
+# return ($code, 'ok', 'ok') if ($code == 0);
+
+ if ($CurrentVirusScannerMessage =~ qr/^Infected files *:0(?!\d)/ or
+ $CurrentVirusScannerMessage =~ qr/^(?:Infected files|Identified viruses|Suspect files) *:0*[1-9]/ or
+ $CurrentVirusScannerMessage =~ m/(?:suspected|infected)\: (.*)/) {
+ $VirusName = $1
+ if ($CurrentVirusScannerMessage =~ m/(?:suspected|infected)\: (\S+)\033/);
+ return ($code, 'virus', 'quarantine');
+ } else {
+ return (0, 'ok', 'ok');
+ }
+
+ # All other codes should not happen
+ return ($code, 'swerr', 'tempfail');
+}
+
+#***********************************************************************
# %PROCEDURE: entity_contains_virus_vexira
# %ARGUMENTS:
# entity -- a MIME entity
More information about the MIMEDefang
mailing list