Bugfix related to exception in process()
[confparser-old] / mail.filter
index e6ed083..83a9e4b 100755 (executable)
@@ -41,7 +41,7 @@ import email
 import types
 import re
 
-import mfvalidator
+import confparser
 
 from os import EX_USAGE, EX_OK, EX_NOUSER, EX_TEMPFAIL, EX_DATAERR
 # EX_OK           0       ok
@@ -85,6 +85,7 @@ except ImportError :
        except ImportError :
                print 'Please install subprocess module.'
                print 'See http://www.lysator.liu.se/~astrand/popen5/.'
+               sys.exit( 1 )
 
 #--[ Configuration variables ]------------------------------------------------
 
@@ -262,7 +263,8 @@ def logMessage( msg ) :
                try :
                        logMessage.logFile = open( g_pathLog , 'a+' )
                except :
-                       return
+                       if not g_copyLogToStdout :
+                               return
 
        msg = msg.splitlines()
        prefix = timestamp() + ' [%s] ' % os.getpid()
@@ -323,7 +325,7 @@ def backup( filenamePrefix = None ) :
                f.write( g_mailText )
                f.close()
        except :
-               logMessage( 'Error saving backup copy.' )
+               logMessage( 'PANIC: Unable to write backup to %s.' % fn )
        else :
                logMessage( 'Message appended to backup directory as `%s\'.' % basename )
 
@@ -535,35 +537,17 @@ def errorNameToErrorCode( code ) :
 #
 def readUserRules( user ) :
 
-       import confparser
-       #
-       # Read the configuration file.
-       #
-       try :
-               f = open( g_directoryRules + '/' + user + '.mf' )
-       except IOError :
-               return
-       conf = f.read()
-
-       #
-       # Parse the configuration.
-       #
-       conf = confparser.parse( conf )
-
-       #
-       # Validate the configuration.
-       #
-       r = mfvalidator.checkConf( conf )
-       if r == None :
-               return conf
+       filename = g_directoryRules + '/' + user + '.mf'
 
        #
-       # Output a error message in case an error is encountered.
+       # Read the configuration.
        #
-       exception , node = r
-       meta = node[ 3 ]
-       msg = 'at line %s, column %s' % ( meta[ 0 ] , meta[ 1 ] )
-       logMessage( 'Error in configuration file %s: %s' % ( msg , exception ) )
+       try :
+               return confparser.readConfiguration( filename )
+       except OSError , e :
+               pass
+       except Exception , e :
+               logMessage( 'Error in file %r. See option -c to check this file.' % ( filename , ) )
 
 #-----------------------------------------------------------------------------
 
@@ -823,6 +807,8 @@ def process() :
                checkForLargeMail()
                parseMail()
                return dispatchMail()
+       except SystemExit :
+               raise
        except :
                logMessage( getTraceBack() )
                return EX_DATAERR
@@ -831,7 +817,10 @@ def process() :
 
 def checkConfiguration( filename ) :
 
-       mfvalidator.checkFile( filename )
+       try :
+               confparser.readConfiguration( filename )
+       except Exception , e :
+               print e
 
 #-----------------------------------------------------------------------------