Apply by doing: cd /usr/src patch -p0 < 014_sendmail.patch And then rebuild and install sendmail: cd gnu/usr.sbin/sendmail make depend make make install Restart sendmail if necessary: kill -HUP `sed q /var/run/sendmail.pid` Index: gnu/usr.sbin/sendmail/cf/README =================================================================== RCS file: /cvs/src/gnu/usr.sbin/sendmail/cf/README,v retrieving revision 1.15 retrieving revision 1.15.2.1 diff -u -r1.15 -r1.15.2.1 --- gnu/usr.sbin/sendmail/cf/README 15 Sep 2002 02:23:35 -0000 1.15 +++ gnu/usr.sbin/sendmail/cf/README 31 Mar 2003 01:01:46 -0000 1.15.2.1 @@ -3630,6 +3630,7 @@ confMAX_MIME_HEADER_LENGTH MaxMimeHeaderLength [undefined] Maximum length of certain MIME header field values. + If not set, sendmail uses 2048/1024. confCONNECTION_RATE_THROTTLE ConnectionRateThrottle [undefined] The maximum number of connections permitted per second per @@ -4311,4 +4312,4 @@ 8 DNS based blacklists 9 special local rulesets (1 and 2) -$Revision: 1.15 $, Last updated $Date: 2002/09/15 02:23:35 $ +$Revision: 1.15.2.1 $, Last updated $Date: 2003/03/31 01:01:46 $ Index: gnu/usr.sbin/sendmail/sendmail/README =================================================================== RCS file: /cvs/src/gnu/usr.sbin/sendmail/sendmail/README,v retrieving revision 1.14 retrieving revision 1.14.2.1 diff -u -r1.14 -r1.14.2.1 --- gnu/usr.sbin/sendmail/sendmail/README 26 Jun 2002 04:48:55 -0000 1.14 +++ gnu/usr.sbin/sendmail/sendmail/README 31 Mar 2003 01:01:47 -0000 1.14.2.1 @@ -475,6 +475,9 @@ parameter of main(). USE_DOUBLE_FORK By default this is on (1). Set it to 0 to suppress the extra fork() used to avoid intermediate zombies. +ALLOW_255 Do not convert (char)0xff to (char)0x7f in headers etc. + This can also be done at runtime with the command line + option -d82.101. +-----------------------+ @@ -1768,4 +1771,4 @@ version.c The version number and information about this version of sendmail. -(Version $Revision: 1.14 $, last update $Date: 2002/06/26 04:48:55 $ ) +(Version $Revision: 1.14.2.1 $, last update $Date: 2003/03/31 01:01:47 $ ) Index: gnu/usr.sbin/sendmail/sendmail/collect.c =================================================================== RCS file: /cvs/src/gnu/usr.sbin/sendmail/sendmail/collect.c,v retrieving revision 1.13 retrieving revision 1.13.2.1 diff -u -r1.13 -r1.13.2.1 --- gnu/usr.sbin/sendmail/sendmail/collect.c 15 Sep 2002 02:23:35 -0000 1.13 +++ gnu/usr.sbin/sendmail/sendmail/collect.c 31 Mar 2003 01:01:47 -0000 1.13.2.1 @@ -434,6 +434,7 @@ OpMode != MD_ARPAFTP)) { + SM_ASSERT(pbp < peekbuf + sizeof(peekbuf)); *pbp++ = c; c = '.'; } @@ -445,6 +446,7 @@ else { /* push back the ".\rx" */ + SM_ASSERT(pbp < peekbuf + sizeof(peekbuf)); *pbp++ = c; if (OpMode != MD_SMTP && OpMode != MD_DAEMON && @@ -615,6 +617,7 @@ } /* trim off trailing CRLF or NL */ + SM_ASSERT(bp > buf); if (*--bp != '\n' || *--bp != '\r') bp++; *bp = '\0'; Index: gnu/usr.sbin/sendmail/sendmail/conf.c =================================================================== RCS file: /cvs/src/gnu/usr.sbin/sendmail/sendmail/conf.c,v retrieving revision 1.16 retrieving revision 1.16.2.1 diff -u -r1.16 -r1.16.2.1 --- gnu/usr.sbin/sendmail/sendmail/conf.c 15 Sep 2002 02:23:35 -0000 1.16 +++ gnu/usr.sbin/sendmail/sendmail/conf.c 31 Mar 2003 01:01:47 -0000 1.16.2.1 @@ -330,6 +330,8 @@ DontProbeInterfaces = DPI_PROBEALL; DoubleBounceAddr = "postmaster"; MaxHeadersLength = MAXHDRSLEN; + MaxMimeHeaderLength = MAXLINE; + MaxMimeFieldLength = MaxMimeHeaderLength / 2; MaxForwardEntries = 0; FastSplit = 1; #if SASL Index: gnu/usr.sbin/sendmail/sendmail/deliver.c =================================================================== RCS file: /cvs/src/gnu/usr.sbin/sendmail/sendmail/deliver.c,v retrieving revision 1.16 retrieving revision 1.16.2.1 diff -u -r1.16 -r1.16.2.1 --- gnu/usr.sbin/sendmail/sendmail/deliver.c 15 Sep 2002 02:23:35 -0000 1.16 +++ gnu/usr.sbin/sendmail/sendmail/deliver.c 31 Mar 2003 01:01:47 -0000 1.16.2.1 @@ -1154,7 +1154,7 @@ /* Need to account for IPv6 bracketed addresses */ if (*a == '[') braclev++; - else if (*a == '[' && braclev > 0) + else if (*a == ']' && braclev > 0) braclev--; else if (*a == ':' && braclev <= 0) { @@ -4700,7 +4700,11 @@ { pos += bp - buf; if (c != '\r') + { + SM_ASSERT(pbp < peekbuf + + sizeof(peekbuf)); *pbp++ = c; + } } bp = buf; @@ -4740,6 +4744,7 @@ } /* had a naked carriage return */ + SM_ASSERT(pbp < peekbuf + sizeof(peekbuf)); *pbp++ = c; c = '\r'; ostate = OS_INLINE; @@ -4768,7 +4773,11 @@ else if ((d = sm_io_getc(e->e_dfp, SM_TIME_DEFAULT)) != SM_IO_EOF) + { + SM_ASSERT(pbp < peekbuf + + sizeof(peekbuf)); *pbp++ = d; + } if (d == '\n' || d == SM_IO_EOF) { @@ -4818,6 +4827,8 @@ mci->mci_mailer->m_eol); } ostate = OS_HEAD; + SM_ASSERT(pbp < peekbuf + + sizeof(peekbuf)); *pbp++ = c; continue; } Index: gnu/usr.sbin/sendmail/sendmail/parseaddr.c =================================================================== RCS file: /cvs/src/gnu/usr.sbin/sendmail/sendmail/parseaddr.c,v retrieving revision 1.13 retrieving revision 1.13.2.2 diff -u -r1.13 -r1.13.2.2 --- gnu/usr.sbin/sendmail/sendmail/parseaddr.c 15 Sep 2002 02:23:36 -0000 1.13 +++ gnu/usr.sbin/sendmail/sendmail/parseaddr.c 31 Mar 2003 01:01:47 -0000 1.13.2.2 @@ -608,7 +608,7 @@ }; -#define NOCHAR -1 /* signal nothing in lookahead token */ +#define NOCHAR (-1) /* signal nothing in lookahead token */ char ** prescan(addr, delim, pvpbuf, pvpbsize, delimptr, toktab) @@ -694,6 +694,7 @@ /* see if there is room */ if (q >= &pvpbuf[pvpbsize - 5]) { + addrtoolong: usrerr("553 5.1.1 Address too long"); if (strlen(addr) > MAXNAME) addr[MAXNAME] = '\0'; @@ -705,11 +706,15 @@ } /* squirrel it away */ +#if !ALLOW_255 + if ((char) c == (char) -1 && !tTd(82, 101)) + c &= 0x7f; +#endif /* !ALLOW_255 */ *q++ = c; } /* read a new input character */ - c = *p++; + c = (*p++) & 0x00ff; if (c == '\0') { /* diagnose and patch up bad syntax */ @@ -764,6 +769,9 @@ } else if (c != '!' || state == QST) { + /* see if there is room */ + if (q >= &pvpbuf[pvpbsize - 5]) + goto addrtoolong; *q++ = '\\'; continue; } @@ -849,6 +857,9 @@ /* new token */ if (tok != q) { + /* see if there is room */ + if (q >= &pvpbuf[pvpbsize - 5]) + goto addrtoolong; *q++ = '\0'; if (tTd(22, 36)) {