Fix exception in virus scan.
authorFrederic Jolliton <frederic@jolliton.com>
Thu, 18 Nov 2004 05:19:28 +0000 (05:19 +0000)
committerFrederic Jolliton <frederic@jolliton.com>
Thu, 18 Nov 2004 05:19:28 +0000 (05:19 +0000)
* IMPORTANT: We catch exception derived from Exception, but antivirusScan was
  throwing a string exception. That caused global try/catch to miss that, and
  let sendmail believe than the mail was correctly delivered.

* confparser.readConfiguration now return None if rule file doesn't exist.

* Removed log for absence of rule (either because the user file doesn't exist,
  or because no rule are defined inside it.)
git-archimport-id: frederic@jolliton.com--2004-private/mail-filter--main--0.1.2--patch-3

confparser.py
mailfilter.py

index d9b213b..3c5f7be 100644 (file)
@@ -8,6 +8,7 @@ import types
 import sys
 import os
 import stat
+import errno
 
 try :
        import cPickle as pickle
@@ -251,6 +252,10 @@ def readConfiguration( filename ) :
                # 4. Keep cached result
                #
                writeCachedConfiguration( filename , conf , isValid )
+       except IOError , e :
+               if e[ 0 ] == errno.ENOENT :
+                       return None
+               raise Exception( 'While reading file %s:\n%s' % ( filename , str( e ) ) )
        except Exception , e :
                raise Exception( 'While reading file %s:\n%s' % ( filename , str( e ) ) )
        return conf
index c661e37..b46ca71 100644 (file)
@@ -491,7 +491,7 @@ def antivirusScan() :
        output = stderr or ''
        #logMessage( 'clamdscan returned %s' % rc )
        if rc == 2 :
-               raise 'Unable to scan for viruses (%s)' % cmd
+               raise Exception( 'Unable to scan for viruses (%s)' % cmd )
        ok = not rc
        if not ok :
                msg = 'Virus found.'
@@ -561,6 +561,7 @@ def readUserRules( user ) :
        except OSError , e :
                pass
        except Exception , e :
+               logMessage( str( e ) )
                logMessage( 'Error in file %r. See option -c to check this file.' % ( filename , ) )
 
 #-----------------------------------------------------------------------------
@@ -715,16 +716,11 @@ def checkUserRules( user ) :
 
        conf = readUserRules( user )
 
-       if not conf :
-
-               logMessage( 'No rules defined for user `%s\'.' % user )
-
-       elif not conf[ 2 ] :
-
-               logMessage( 'Empty rules set or syntax error encountered for user `%s\'.' % user )
-
-       else :
-
+       #
+       # conf == None  => No rule file.
+       # not conf[ 2 ] => File exist, but contains no rules.
+       #
+       if conf != None and conf[ 2 ] :
                for item in conf[ 2 ] :
                        actionName , args , subs = item[ : 3 ]