- Fixed bug #28038 (Sent incorrect RCPT TO commands to SMTP server)

This commit is contained in:
Garrett Serack 2009-08-18 18:58:33 +00:00
parent 26f27ad7a8
commit 827469c94e
2 changed files with 34 additions and 6 deletions

1
NEWS
View File

@ -146,6 +146,7 @@ PHP NEWS
com, Kalle) com, Kalle)
- Fixed bug #38091 (Mail() does not use FQDN when sending SMTP helo). - Fixed bug #38091 (Mail() does not use FQDN when sending SMTP helo).
(Kalle, Rick Yorgason) (Kalle, Rick Yorgason)
- Fixed bug #28038 (Sent incorrect RCPT TO commands to SMTP server) (Garrett)
30 Jun 2009, PHP 5.3.0 30 Jun 2009, PHP 5.3.0
- Upgraded bundled PCRE to version 7.9. (Nuno) - Upgraded bundled PCRE to version 7.9. (Nuno)

View File

@ -422,7 +422,7 @@ static int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char
} }
SMTP_SKIP_SPACE(RPath); SMTP_SKIP_SPACE(RPath);
snprintf(Buffer, MAIL_BUFFER_SIZE, "MAIL FROM:<%s>\r\n", RPath); FormatEmailAddress(Buffer, RPath, "MAIL FROM:<%s>\r\n");
if ((res = Post(Buffer)) != SUCCESS) { if ((res = Post(Buffer)) != SUCCESS) {
return (res); return (res);
} }
@ -437,7 +437,7 @@ static int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char
while (token != NULL) while (token != NULL)
{ {
SMTP_SKIP_SPACE(token); SMTP_SKIP_SPACE(token);
snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); FormatEmailAddress(Buffer, token, "RCPT TO:<%s>\r\n");
if ((res = Post(Buffer)) != SUCCESS) { if ((res = Post(Buffer)) != SUCCESS) {
efree(tempMailTo); efree(tempMailTo);
return (res); return (res);
@ -458,7 +458,7 @@ static int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char
while (token != NULL) while (token != NULL)
{ {
SMTP_SKIP_SPACE(token); SMTP_SKIP_SPACE(token);
snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); FormatEmailAddress(Buffer, token, "RCPT TO:<%s>\r\n");
if ((res = Post(Buffer)) != SUCCESS) { if ((res = Post(Buffer)) != SUCCESS) {
efree(tempMailTo); efree(tempMailTo);
return (res); return (res);
@ -488,7 +488,7 @@ static int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char
while (token != NULL) while (token != NULL)
{ {
SMTP_SKIP_SPACE(token); SMTP_SKIP_SPACE(token);
snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); FormatEmailAddress(Buffer, token, "RCPT TO:<%s>\r\n");
if ((res = Post(Buffer)) != SUCCESS) { if ((res = Post(Buffer)) != SUCCESS) {
efree(tempMailTo); efree(tempMailTo);
return (res); return (res);
@ -513,7 +513,7 @@ static int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char
while (token != NULL) while (token != NULL)
{ {
SMTP_SKIP_SPACE(token); SMTP_SKIP_SPACE(token);
snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); FormatEmailAddress(Buffer, token, "RCPT TO:<%s>\r\n");
if ((res = Post(Buffer)) != SUCCESS) { if ((res = Post(Buffer)) != SUCCESS) {
efree(tempMailTo); efree(tempMailTo);
return (res); return (res);
@ -546,7 +546,7 @@ static int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char
while (token != NULL) while (token != NULL)
{ {
SMTP_SKIP_SPACE(token); SMTP_SKIP_SPACE(token);
snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); FormatEmailAddress(Buffer, token, "RCPT TO:<%s>\r\n");
if ((res = Post(Buffer)) != SUCCESS) { if ((res = Post(Buffer)) != SUCCESS) {
efree(tempMailTo); efree(tempMailTo);
return (res); return (res);
@ -960,3 +960,30 @@ static unsigned long GetAddr(LPSTR szHost)
} }
return (lAddr); return (lAddr);
} /* end GetAddr() */ } /* end GetAddr() */
/*********************************************************************
// Name: int FormatEmailAddress
// Input:
// Output:
// Description: Formats the email address to remove any content ouside
// of the angle brackets < > as per RFC 2821.
//
// Returns the invalidly formatted mail address if the < > are
// unbalanced (the SMTP server should reject it if it's out of spec.)
//
// Author/Date: garretts 08/18/2009
// History:
//********************************************************************/
int FormatEmailAddress(char* Buffer, char* EmailAddress, char* FormatString ) {
char *tmpAddress1, *tmpAddress2;
int result;
if( (tmpAddress1 = strchr(EmailAddress, '<')) && (tmpAddress2 = strchr(tmpAddress1, '>')) ) {
*tmpAddress2 = 0; // terminate the string temporarily.
result = snprintf(Buffer, MAIL_BUFFER_SIZE, FormatString , tmpAddress1+1);
*tmpAddress2 = '>'; // put it back the way it was.
return result;
}
return snprintf(Buffer, MAIL_BUFFER_SIZE , FormatString , EmailAddress );
} /* end FormatEmailAddress() */