$NetBSD: patch-aa,v 1.7 2005/06/29 22:01:19 is Exp $ --- mini_sendmail.c.orig 2005-06-29 19:37:15.000000000 +0200 +++ mini_sendmail.c @@ -134,6 +134,8 @@ main( int argc, char** argv ) timeout = atoi( &(argv[argn][2]) ); else if ( strcmp( argv[argn], "-v" ) == 0 ) verbose = 1; + else if ( strcmp( argv[argn], "-oeq" ) == 0 ) + verbose = 0; else if ( strcmp( argv[argn], "-i" ) == 0 ) ; /* ignore */ else if ( strcmp( argv[argn], "-oi" ) == 0 ) @@ -507,14 +509,24 @@ parse_for_recipients( char* message ) switch ( *cp ) { case '\n': - add_recipient( recip, ( cp - recip ) ); - state = ST_BOL; - if ( bcc != (char*) 0 ) + /* peek ahead for continuation line */ + switch (cp[1]) { - /* Elide the Bcc: line, and reset cp. */ - (void) strcpy( bcc, cp + 1 ); - cp = bcc - 1; - bcc = (char*) 0; + case ' ': + case '\t': + break; + + default: + add_recipient( recip, ( cp - recip ) ); + state = ST_BOL; + if ( bcc != (char*) 0 ) + { + /* Elide the Bcc: line, and reset cp. */ + (void) strcpy( bcc, cp + 1 ); + cp = bcc - 1; + bcc = (char*) 0; + } + break; } break; case ',': @@ -532,25 +544,46 @@ static void add_recipient( char* recipient, int len ) { char buf[1000]; + char *first; int status; + int i; + /* Skip leading whitespace. */ - while ( len > 0 && ( *recipient == ' ' || *recipient == '\t' ) ) + while ( len > 0 && ( *recipient == ' ' || *recipient == '\t' || + *recipient == '\n') ) { ++recipient; --len; } - /* Strip off any angle brackets. */ - while ( len > 0 && *recipient == '<' ) + first = recipient; + /* search for angle bracket */ + + while (first < recipient+len && *first != '<') { - ++recipient; - --len; + ++first; } - while ( len > 0 && recipient[len-1] == '>' ) - --len; + + if (*first == '<') + { + len -= first + 1 - recipient; + recipient = first + 1; + + while (len > 2 && recipient[--len] != '>') + ; /* nothing */ + + if (recipient[len] == '>') + --len; + + } (void) snprintf( buf, sizeof(buf), "RCPT TO:<%.*s>", len, recipient ); + for (i=0; i