99 lines
2.3 KiB
Text
99 lines
2.3 KiB
Text
$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<sizeof(buf); i++)
|
|
+ {
|
|
+ if (buf[i] == '\n')
|
|
+ buf[i] = ' ';
|
|
+ }
|
|
send_command( buf );
|
|
status = read_response();
|
|
if ( status != 250 && status != 251 )
|