version 1.1.1.2.2.1, 2013/07/22 01:44:16
|
version 1.1.1.5, 2014/06/15 20:03:57
|
Line 2
|
Line 2
|
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| PHP Version 5 | |
| PHP Version 5 | |
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| Copyright (c) 1997-2012 The PHP Group | | | Copyright (c) 1997-2014 The PHP Group | |
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| This source file is subject to version 3.01 of the PHP license, | |
| This source file is subject to version 3.01 of the PHP license, | |
| that is bundled with this package in the file LICENSE, and is | |
| that is bundled with this package in the file LICENSE, and is | |
Line 39
|
Line 39
|
#endif |
#endif |
#endif |
#endif |
|
|
|
#include "php_syslog.h" |
#include "php_mail.h" |
#include "php_mail.h" |
#include "php_ini.h" |
#include "php_ini.h" |
#include "php_string.h" |
#include "php_string.h" |
Line 189 PHP_FUNCTION(mail)
|
Line 190 PHP_FUNCTION(mail)
|
} |
} |
/* }}} */ |
/* }}} */ |
|
|
|
|
|
void php_mail_log_crlf_to_spaces(char *message) { |
|
/* Find all instances of carriage returns or line feeds and |
|
* replace them with spaces. Thus, a log line is always one line |
|
* long |
|
*/ |
|
char *p = message; |
|
while ((p = strpbrk(p, "\r\n"))) { |
|
*p = ' '; |
|
} |
|
} |
|
|
|
void php_mail_log_to_syslog(char *message) { |
|
/* Write 'message' to syslog. */ |
|
#ifdef HAVE_SYSLOG_H |
|
php_syslog(LOG_NOTICE, "%s", message); |
|
#endif |
|
} |
|
|
|
|
|
void php_mail_log_to_file(char *filename, char *message, size_t message_size TSRMLS_DC) { |
|
/* Write 'message' to the given file. */ |
|
uint flags = IGNORE_URL_WIN | REPORT_ERRORS | STREAM_DISABLE_OPEN_BASEDIR; |
|
php_stream *stream = php_stream_open_wrapper(filename, "a", flags, NULL); |
|
if (stream) { |
|
php_stream_write(stream, message, message_size); |
|
php_stream_close(stream); |
|
} |
|
} |
|
|
|
|
/* {{{ php_mail |
/* {{{ php_mail |
*/ |
*/ |
PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char *extra_cmd TSRMLS_DC) |
PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char *extra_cmd TSRMLS_DC) |
Line 216 PHPAPI int php_mail(char *to, char *subject, char *mes
|
Line 248 PHPAPI int php_mail(char *to, char *subject, char *mes
|
if (mail_log && *mail_log) { |
if (mail_log && *mail_log) { |
char *tmp; |
char *tmp; |
int l = spprintf(&tmp, 0, "mail() on [%s:%d]: To: %s -- Headers: %s\n", zend_get_executed_filename(TSRMLS_C), zend_get_executed_lineno(TSRMLS_C), to, hdr ? hdr : ""); |
int l = spprintf(&tmp, 0, "mail() on [%s:%d]: To: %s -- Headers: %s\n", zend_get_executed_filename(TSRMLS_C), zend_get_executed_lineno(TSRMLS_C), to, hdr ? hdr : ""); |
php_stream *stream = php_stream_open_wrapper(mail_log, "a", IGNORE_URL_WIN | REPORT_ERRORS | STREAM_DISABLE_OPEN_BASEDIR, NULL); |
|
|
|
if (hdr) { /* find all \r\n instances and replace them with spaces, so a log line is always one line long */ | if (hdr) { |
char *p = tmp; | php_mail_log_crlf_to_spaces(tmp); |
while ((p = strpbrk(p, "\r\n"))) { | |
*p = ' '; | |
} | |
tmp[l - 1] = '\n'; | |
} |
} |
if (stream) { | |
php_stream_write(stream, tmp, l); | if (!strcmp(mail_log, "syslog")) { |
php_stream_close(stream); | /* Drop the final space when logging to syslog. */ |
| tmp[l - 1] = 0; |
| php_mail_log_to_syslog(tmp); |
} |
} |
|
else { |
|
/* Convert the final space to a newline when logging to file. */ |
|
tmp[l - 1] = '\n'; |
|
php_mail_log_to_file(mail_log, tmp, l TSRMLS_CC); |
|
} |
|
|
efree(tmp); |
efree(tmp); |
} |
} |
if (PG(mail_x_header)) { |
if (PG(mail_x_header)) { |
Line 241 PHPAPI int php_mail(char *to, char *subject, char *mes
|
Line 276 PHPAPI int php_mail(char *to, char *subject, char *mes
|
if (headers != NULL) { |
if (headers != NULL) { |
spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n%s", php_getuid(TSRMLS_C), f, headers); |
spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n%s", php_getuid(TSRMLS_C), f, headers); |
} else { |
} else { |
spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n", php_getuid(TSRMLS_C), f); | spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s", php_getuid(TSRMLS_C), f); |
} |
} |
efree(f); |
efree(f); |
} |
} |
Line 283 PHPAPI int php_mail(char *to, char *subject, char *mes
|
Line 318 PHPAPI int php_mail(char *to, char *subject, char *mes
|
sendmail = popen_ex(sendmail_cmd, "wb", NULL, NULL TSRMLS_CC); |
sendmail = popen_ex(sendmail_cmd, "wb", NULL, NULL TSRMLS_CC); |
#else |
#else |
/* Since popen() doesn't indicate if the internal fork() doesn't work |
/* Since popen() doesn't indicate if the internal fork() doesn't work |
* (e.g. the shell can't be executed) we explicitely set it to 0 to be | * (e.g. the shell can't be executed) we explicitly set it to 0 to be |
* sure we don't catch any older errno value. */ |
* sure we don't catch any older errno value. */ |
errno = 0; |
errno = 0; |
sendmail = popen(sendmail_cmd, "w"); |
sendmail = popen(sendmail_cmd, "w"); |