diff options
| author | foobar <sniper@php.net> | 2005-01-19 17:38:32 +0000 |
|---|---|---|
| committer | foobar <sniper@php.net> | 2005-01-19 17:38:32 +0000 |
| commit | a04ad392ffefaa8ae7bc618629fe0667bf27e721 (patch) | |
| tree | 2b9d841e37e0ad50eb57a3ac372127095413975e /win32/sendmail.c | |
| parent | 7f28203b568deee50010c8f82b29010f4625d091 (diff) | |
| download | php-git-a04ad392ffefaa8ae7bc618629fe0667bf27e721.tar.gz | |
MFH: - Fixed bug #28976 (use From: from headers if sendmail_from is empty)
Diffstat (limited to 'win32/sendmail.c')
| -rw-r--r-- | win32/sendmail.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/win32/sendmail.c b/win32/sendmail.c index 98659d4db4..07e1275cb2 100644 --- a/win32/sendmail.c +++ b/win32/sendmail.c @@ -225,6 +225,7 @@ PHPAPI int TSendMail(char *host, int *error, char **error_message, int ret; char *RPath = NULL; char *headers_lc = NULL; /* headers_lc is only created if we've a header at all */ + char *pos1 = NULL, *pos2 = NULL; TSRMLS_FETCH(); #ifndef NETWARE @@ -266,9 +267,21 @@ PHPAPI int TSendMail(char *host, int *error, char **error_message, /* Fall back to sendmail_from php.ini setting */ if (mailRPath && *mailRPath) { RPath = estrdup(mailRPath); - } - else if (INI_STR("sendmail_from")) { + } else if (INI_STR("sendmail_from")) { RPath = estrdup(INI_STR("sendmail_from")); + } else if ( headers_lc && + (pos1 = strstr(headers_lc, "from:")) && + ((pos1 == headers_lc) || (*(pos1-1) == '\n')) + ) { + /* Real offset is memaddress from the original headers + difference of + * string found in the lowercase headrs + 5 characters to jump over + * the from: */ + pos1 = headers + (pos1 - headers_lc) + 5; + if (NULL == (pos2 = strstr(pos1, "\r\n"))) { + RPath = estrndup(pos1, strlen(pos1)); + } else { + RPath = estrndup(pos1, pos2-pos1); + } } else { if (headers) { efree(headers); |
