Jason R. Mastaler wrote:
Stephen Warren <[EMAIL PROTECTED]> writes:

I had one question about the exception handler code you added as
described above. Specifically, do you have any way of easily
reproducing the exceptions that your code catches. A long time ago,
I wrote the original code for that exception handler that you
included, but I can't work out how to trigger the problem I was
trying to solve originally - any information would be greatly
appreciated!
You can generate an exception just by doing this in your outgoing filter:
to [EMAIL PROTECTED] as [EMAIL PROTECTED]

Note that it's difficult to see what I did wrong there... :-)


BTW, the poster of this patch is also a Thunderbird user.  I think I'm
detecting a theme here.  <wink>

Actually, primarily I use Mail.app (on my home machine), but for work I use thunderbird... I think it's been fixed to do the right thing with a dropped connection, but I figured that returning a somewhat intelligible error was better than just dropping the connection.

Unfortunately, I dropped the ball on my exception handling, and that raised a different exception. I've got an updated patch, which I'll append here.

I should probably break it into 3 separate patches, since it does three things: adds the -l option, for 'some' debugging/logging output [only difference from -d is that it doesn't log the client data sent] Handles exceptions from __server.process_message() [ I really wanted to improve this to get the last bit of output from tmda-inject, which would show that the filter was broken, or whatever, but I'm a rank-newbie Python programmer] fix the only thing I consider a 'real' bug, which is not-invoking sendmail_program with '-f <mailfrom>' when in 'pure-proxy' mode.


Robert

--
Robert Thille                7575 Meadowlark Dr.; Sebastopol, CA 95472
Home: 707.824.9753    Office/VOIP: 707.780.1560     Cell: 707.217.7544
[EMAIL PROTECTED]    YIM:rthille     http://www.rangat.org/rthille
Cyclist, Mountain Biker, Freediver, Kayaker, Rock Climber, Hiker, Geek
May your spirit dive deep the blue, where the fish are many and large!

$NetBSD$

--- bin/tmda-ofmipd.orig        2006-10-25 16:40:57.000000000 +0000
+++ bin/tmda-ofmipd
@@ -95,6 +95,10 @@ gengroup.add_option("-d", "--debug",
                  action="store_true", default=False, dest="debug",
                  help="Turn on debugging prints.")
 
+gengroup.add_option("-l", "--log",
+                 action="store_true", default=False, dest="log",
+                 help="Turn on logging prints.")
+
 gengroup.add_option("-b", "--background",
                  action="store_false", dest="foreground",
                  help="Detach and run in the background (default).")
@@ -245,7 +249,7 @@ if opts.full_version:
     sys.exit()
 if opts.vhomescript and opts.configdir:
     parser.error("options '--vhome-script' and '--configdir' are 
incompatible!")
-if opts.debug:
+if opts.debug or opts.log:
     DEBUGSTREAM = sys.stderr
 else:
     DEBUGSTREAM = Devnull()
@@ -743,7 +747,8 @@ class SMTPChannel(asynchat.async_chat):
     # Implementation of base class abstract method
     def found_terminator(self):
         line = EMPTYSTRING.join(self.__line)
-        print >> DEBUGSTREAM, 'Data:', repr(line)
+       if opts.debug:
+           print >> DEBUGSTREAM, 'Data:', repr(line)
         self.__line = []
         if self.__state == self.COMMAND:
             if not line:
@@ -776,13 +781,21 @@ class SMTPChannel(asynchat.async_chat):
 
             if not opts.throttlescript or not os.system("%s %s" % 
(opts.throttlescript,
                 self.__auth_username)):
-                status = self.__server.process_message(self.__peer,
-                                                       self.__mailfrom,
-                                                       self.__rcpttos,
-                                                       self.__data,
-                                                       self.__auth_username)
+               try:
+                   status = self.__server.process_message(self.__peer,
+                                                          self.__mailfrom,
+                                                          self.__rcpttos,
+                                                          self.__data,
+                                                          self.__auth_username)
+                   print >> DEBUGSTREAM, 'Message Complete.'
+               except IOError, err:
+                   status = '451 Error injecting message' 
+                   print >> DEBUGSTREAM, 'Error:', err
+               except Exception, ex:
+                   status = '451 Internal exception in tmda-ofmipd'
+                   print >> DEBUGSTREAM, 'Error:', ex
             else:
-                status = self.push('450 Outgoing mail quota exceeded')
+                status = '450 Outgoing mail quota exceeded'
 
             self.__rcpttos = []
             self.__mailfrom = None
@@ -1112,7 +1120,7 @@ class VDomainProxy(PureProxy):
                                              (vhomedir, '.tmda', 'config')):
             sendmail_program = os.environ.get('TMDA_SENDMAIL_PROGRAM') \
                                or '/usr/sbin/sendmail'
-            inject_cmd = [sendmail_program, '-i', '--'] + rcpttos
+            inject_cmd = [sendmail_program, '-f', mailfrom, '-i', '--'] + 
rcpttos
         try:
             Util.pipecmd(inject_cmd, data)
         except Exception, err:
@@ -1139,7 +1147,7 @@ class TMDAProxy(PureProxy):
         if opts.pure_proxy and not os.path.exists(tmda_configfile):
             sendmail_program = os.environ.get('TMDA_SENDMAIL_PROGRAM') \
                                or '/usr/sbin/sendmail'
-            inject_cmd = [sendmail_program, '-i', '--'] + rcpttos
+            inject_cmd = [sendmail_program, '-f', mailfrom, '-i', '--'] + 
rcpttos
         else:
             execdir = os.path.dirname(os.path.abspath(program))
             inject_path = os.path.join(execdir, 'tmda-inject')
_________________________________________________
tmda-workers mailing list ([email protected])
http://tmda.net/lists/listinfo/tmda-workers

Reply via email to