[Mailman-Developers] A (the?) MIME digest / MTA problem

Ken Manheimer klm@python.org
Fri, 10 Jul 1998 19:32:29 -0400 (EDT)


On Sat, 11 Jul 1998, Gergely Madarasz wrote:

> On 11 Jul 1998, Janne Sinkkonen wrote:

> > There exists a problem with MIME digests of b4 and some
> > MTAs. Something in some digests makes the receiving end to think that
> > it has received the whole message, while the sending MTA (mine was
> > sendmail 8.8.5, now 8.9.1) thinks it failed and leaves the message to
> > the spool. The message needs to be removed manually, for otherwise the
> > poor subscriber will get a copy of it every time the mail queue is
> > run, indefinitely.
> 
> This is a bug in sendmail, it segfaults on 8bitmime digests when sending
> them to hosts which don't support 8bitmime. I already wrote about this to
> the list a couple of weeks ago. Btw i thought 8.9.1 already has it fixed.

I also suspect that the sendmail problem is causing this particular
behavior - check your mqeue for sendmail core dumps to confirm.

I'm running sendmail 8.9.0 on python.org as of recently, and had to
apply the patch that gergely sent me (thanks again, gergely) to get
around the problem. I'm posting it here, for anyone that's interested
and for the maillist archive.  I think i'll include it and a note about
it in the mailman distribution.

Of course, this patch doesn't help the recipient sites running sendmail
8.8.x and 8.9.x (for some x'es).  Question is, does anyone think we
should we be constraining the digester to 7-bit mime messages -
presumably stripping the 8th bit from messages that have it - just for
the sake of a current bug in the most prominent MTA?  I'd be loathe to
do that, thinking that the bug should be exposed and get fixed.

Ken

*** collect.c.orig	Wed May 20 02:36:05 1998
--- collect.c	Thu May 28 13:29:09 1998
***************
*** 353,360 ****
  			if (*--bp != '\n' || *--bp != '\r')
  				bp++;
  			*bp = '\0';
! 			if (bitset(H_EOH, chompheader(buf, FALSE, hdrp, e)))
! 				mstate = MS_BODY;
  			break;
  
  		  case MS_BODY:
--- 353,364 ----
  			if (*--bp != '\n' || *--bp != '\r')
  				bp++;
  			*bp = '\0';
! 			if (bitset(H_EOH, chompheader(buf, FALSE, hdrp, e))) {
! 			       mstate = MS_BODY;
! 			       if (tTd(30, 35))
! 				    printf("H_EOH, istate=%d, mstate=%d\n", istate, mstate);
! 			       goto nextstate;
! 			}
  			break;
  
  		  case MS_BODY: