Stephen Warren wrote:
> Dave Steinberg wrote:
>> GNUs (as I understand it) is a non-smtp MUA.  So it goes like this:
>>
>> GNUs (via sendmail binary) -> postfix -> tmda-ofmipd
> 
> OK. Interesting. I doubt it's the same issue I was thinking of then - 
> it's extremely unlikely that postfix is not "Seeing" tmda-ofmipd just 
> drop a connection.
> 
> To confirm this, please look at the either/both:
> 
> * postfix logs for when it delivers the message to tmda-ofmipd.

Here are the customer's postfix logs, you can see it gets a 250 from 
tmda-ofmipd:

Dec  5 12:00:41 pascal postfix/pickup[5888]: 72211300B6: uid=1000
from=<REDACTED1>
Dec  5 12:00:41 pascal postfix/cleanup[12187]: 72211300B6:
message-id=<[EMAIL PROTECTED]>
Dec  5 12:00:41 pascal postfix/qmgr[5889]: 72211300B6: from=<REDACTED1>,
size=1711, nrcpt=2 (queue active)
Dec  5 12:00:41 pascal postfix/local[12189]: 72211300B6:
to=<[EMAIL PROTECTED]>, orig_to=<[EMAIL PROTECTED]>, relay=local, delay=0.1,
delays=0.06/0.01/0/0.03, dsn=2.0.0, status=sent (delivered to mailbox)
Dec  5 12:00:46 pascal postfix/smtp[12190]: 72211300B6: to=<REDACTED2>,
relay=mail.geekisp.com[216.168.135.169]:8025, delay=4.7, 
delays=0.06/0.02/2.4/2.2,
dsn=2.0.0, status=sent (250 Ok)
Dec  5 12:00:46 pascal postfix/qmgr[5889]: 72211300B6: removed

> * Run tmda-ofmipd in debug mode and you should also see all the protocol 
> responses that get sent back.

Switched.  I'll ask the customer to send the mail again.

> Given the flow you mentioned, I expect it to log a that tmda-ofmipd 
> reported a 250 message indicating successful forwarding of the message 
> to the configured destination.

That's indeed what the postfix logs say.  I'll confirm when I have more 
from the tmda-ofmipd logs.

>> Error: failure delivering message to command 
>> "['/usr/local/bin/tmda-inject', 'REDACTED2']" (comman
>> d "['/usr/local/bin/tmda-inject', 'REDACTED2']" exited 1  (Traceback 
>> (most recent call last):
>> File "/usr/local/bin/tmda-inject", line 116, in ?
>> orig_msgout_as_string = Util.msg_as_string(msgout) 
>> File "./TMDA/Util.py", line 552, in msg_as_string
>> File "./TMDA/pythonlib/email/generator.py", line 84, in flatten
>> File "./TMDA/pythonlib/email/generator.py", line 109, in _write
>> File "./TMDA/pythonlib/email/generator.py", line 135, in _dispatch
>> File "./TMDA/pythonlib/email/generator.py", line 266, in _handle_message
>> File "./TMDA/pythonlib/email/message.py", line 185, in get_payload
>> TypeError: Expected list, got <type 'str'>))
> 
> This exception is inside tmda-inject. It would be interesting to know 
> why it's happening, but it's probably best to concentrate first on why 
> the error isn't propagated to tmda-ofmipd and hence back to postfix.
> 
> Looking at the code, I honestly can't see why this is happening. I'll 
> need to think about it a little. Sorry.

Fair enough, and no need to apologize - I really appreciate your 
attention to my problem!

Regarding the tmda-ofmipd change you suggested - the code in question, 
in my version, is almost exactly as you suggested I make it.  Here's 
what I did:

Original (slightly reformatted for readability):

if not opts.throttlescript or not os.system("%s %s" % (opts.throttlescript,
   self.__auth_username)):
try:
     status = self.__server.process_message(self.__peer,
                                           self.__mailfrom,
                                           self.__rcpttos,
                                           self.__data,
                                           self.__auth_username)
except:
     print >>DEBUGSTREAM, "process_message raised an exception:"
     import traceback
     traceback.print_exc(DEBUGSTREAM)
     raise
else:
   status = self.push('450 Outgoing mail quota exceeded')

Mine:

if not opts.throttlescript or not os.system("%s %s" % (opts.throttlescript,
   self.__auth_username)):
try:
     status = self.__server.process_message(self.__peer,
                                           self.__mailfrom,
                                           self.__rcpttos,
                                           self.__data,
                                           self.__auth_username)
except:
     status = self.push('451 Internal exception in tmda-ofmipd')
     print >>DEBUGSTREAM, "process_message raised an exception:"
     import traceback
     traceback.print_exc(DEBUGSTREAM)
     raise
else:
   status = self.push('450 Outgoing mail quota exceeded')

... all I did was add the "status = self.push('451..." line.

Clearly the 'raise' would be called in this case, so perhaps we're 
looking at the wrong code path?

>> PS - I'll try your patch for tmda-ofmipd in the morning.  Any chance it 
>> could make its way into the trunk?
> 
> There is some disagreement whether it's the right thing to do; see the 
> archives...

Looks like most of it got implemented, just short of the setting the status.

Per your 2nd mail, other details:

I am running tmda-ofmipd as the vpopmail user, and I am using vpopmail 
virtual domains.  I'm running it via svscan, and the run script is:

#!/bin/sh
PATH=$PATH:/usr/local/bin
QMAILQUEUE="bin/qmail-dk"
RELAYCLIENT=""
DKSIGN="/etc/domainkeys/%/default"

export QMAILQUEUE RELAYCLIENT DKSIGN

exec 2>&1
exec /usr/local/bin/setuidgid vpopmail \
         /usr/local/bin/tmda-ofmipd -f -p localhost:7025 \
                 -A "/home/vpopmail/bin/vchkpw /bin/true" \
                 -S /usr/local/tmda/contrib/vpopmail-vdir.sh \
                 --pure-proxy --debug

I believe tmda-inject is called directly.  I wasn't aware of any hooks 
that would let me call something else, even if I wanted to!

Thanks again for your help,
-- 
Dave Steinberg
http://www.geekisp.com/
http://www.steinbergcomputing.com/
_____________________________________________
tmda-users mailing list (tmda-users@tmda.net)
http://tmda.net/lists/listinfo/tmda-users

Reply via email to