pkgsrc/mail/mini_sendmail/patches/patch-aa
2005-06-29 22:01:19 +00:00

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 )