iliaa Fri Jan 9 15:00:36 2009 UTC
Modified files:
/php-src php.ini-dist php.ini-recommended
/php-src/main main.c php_globals.h
/php-src/ext/standard mail.c
Log:
MFB: Added mail logging functionality that allows logging of mail sent via
mail() function
http://cvs.php.net/viewvc.cgi/php-src/php.ini-dist?r1=1.285&r2=1.286&diff_format=u
Index: php-src/php.ini-dist
diff -u php-src/php.ini-dist:1.285 php-src/php.ini-dist:1.286
--- php-src/php.ini-dist:1.285 Sat Dec 27 21:03:39 2008
+++ php-src/php.ini-dist Fri Jan 9 15:00:36 2009
@@ -669,6 +669,12 @@
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =
+; Add X-PHP-Originaiting-Script: that will include uid of the script followed
by the filename
+mail.add_x_header = Off
+
+; Log all mail() calls including the full path of the script, line #, to
address and headers
+mail.log =
+
[SQL]
sql.safe_mode = Off
http://cvs.php.net/viewvc.cgi/php-src/php.ini-recommended?r1=1.235&r2=1.236&diff_format=u
Index: php-src/php.ini-recommended
diff -u php-src/php.ini-recommended:1.235 php-src/php.ini-recommended:1.236
--- php-src/php.ini-recommended:1.235 Sat Dec 27 21:03:39 2008
+++ php-src/php.ini-recommended Fri Jan 9 15:00:36 2009
@@ -706,6 +706,12 @@
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =
+; Add X-PHP-Originaiting-Script: that will include uid of the script followed
by the filename
+mail.add_x_header = On
+
+; Log all mail() calls including the full path of the script, line #, to
address and headers
+mail.log =
+
[SQL]
sql.safe_mode = Off
http://cvs.php.net/viewvc.cgi/php-src/main/main.c?r1=1.787&r2=1.788&diff_format=u
Index: php-src/main/main.c
diff -u php-src/main/main.c:1.787 php-src/main/main.c:1.788
--- php-src/main/main.c:1.787 Wed Dec 31 13:25:05 2008
+++ php-src/main/main.c Fri Jan 9 15:00:36 2009
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: main.c,v 1.787 2008/12/31 13:25:05 helly Exp $ */
+/* $Id: main.c,v 1.788 2009/01/09 15:00:36 iliaa Exp $ */
/* {{{ includes
*/
@@ -539,6 +539,8 @@
PHP_INI_ENTRY("SMTP",
"localhost",PHP_INI_ALL, NULL)
PHP_INI_ENTRY("smtp_port", "25",
PHP_INI_ALL, NULL)
+ STD_PHP_INI_BOOLEAN("mail.add_x_header", "0",
PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool,
mail_x_header, php_core_globals, core_globals)
+ STD_PHP_INI_ENTRY("mail.log", NULL,
PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateString,
mail_log, php_core_globals, core_globals)
PHP_INI_ENTRY("browscap", NULL,
PHP_INI_SYSTEM, NULL)
PHP_INI_ENTRY("memory_limit", "128M",
PHP_INI_ALL, OnChangeMemoryLimit)
PHP_INI_ENTRY("precision", "14",
PHP_INI_ALL, OnSetPrecision)
http://cvs.php.net/viewvc.cgi/php-src/main/php_globals.h?r1=1.119&r2=1.120&diff_format=u
Index: php-src/main/php_globals.h
diff -u php-src/main/php_globals.h:1.119 php-src/main/php_globals.h:1.120
--- php-src/main/php_globals.h:1.119 Wed Dec 31 11:12:38 2008
+++ php-src/main/php_globals.h Fri Jan 9 15:00:36 2009
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_globals.h,v 1.119 2008/12/31 11:12:38 sebastian Exp $ */
+/* $Id: php_globals.h,v 1.120 2009/01/09 15:00:36 iliaa Exp $ */
#ifndef PHP_GLOBALS_H
#define PHP_GLOBALS_H
@@ -151,6 +151,9 @@
long user_ini_cache_ttl;
char *request_order;
+
+ zend_bool mail_x_header;
+ char *mail_log;
};
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/mail.c?r1=1.100&r2=1.101&diff_format=u
Index: php-src/ext/standard/mail.c
diff -u php-src/ext/standard/mail.c:1.100 php-src/ext/standard/mail.c:1.101
--- php-src/ext/standard/mail.c:1.100 Wed Dec 31 11:12:37 2008
+++ php-src/ext/standard/mail.c Fri Jan 9 15:00:36 2009
@@ -16,13 +16,15 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mail.c,v 1.100 2008/12/31 11:12:37 sebastian Exp $ */
+/* $Id: mail.c,v 1.101 2009/01/09 15:00:36 iliaa Exp $ */
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
#include "php.h"
#include "ext/standard/info.h"
+#include "ext/standard/php_string.h"
+#include "ext/standard/basic_functions.h"
#if HAVE_SYSEXITS_H
#include <sysexits.h>
@@ -66,6 +68,8 @@
*p = ' ';
\
}
\
+extern long php_getuid(void);
+
/* {{{ proto int ezmlm_hash(string addr) U
Calculate EZMLM list hash value. */
PHP_FUNCTION(ezmlm_hash)
@@ -193,25 +197,61 @@
int ret;
char *sendmail_path = INI_STR("sendmail_path");
char *sendmail_cmd = NULL;
+ char *mail_log = INI_STR("mail.log");
+ char *hdr = headers;
#if PHP_SIGCHILD
void (*sig_handler)() = NULL;
#endif
+#define MAIL_RET(val) \
+ if (hdr != headers) { \
+ efree(hdr); \
+ } \
+ return val; \
+
+ if (mail_log) {
+ 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 : "");
+ if (hdr) { /* find all \r\n instances and replace them with
spaces, so a log line is always one line long */
+ char *p = tmp;
+ while ((p = strpbrk(p, "\r\n"))) {
+ *p = ' ';
+ }
+ tmp[l - 1] = '\n';
+ }
+ _php_error_log(3, tmp, mail_log, NULL TSRMLS_CC);
+ efree(tmp);
+ }
+ if (PG(mail_x_header)) {
+ char *tmp = zend_get_executed_filename(TSRMLS_C);
+ char *f;
+ size_t f_len;
+
+ php_basename(tmp, strlen(tmp), NULL, 0,&f, &f_len);
+
+ if (headers != NULL) {
+ spprintf(&hdr, 0, "%s\r\nX-PHP-Originating-Script:
%ld:%s\n", headers, php_getuid(), f);
+ } else {
+ spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n",
php_getuid(), f);
+ }
+ efree(f);
+ }
+
if (!sendmail_path) {
#if (defined PHP_WIN32 || defined NETWARE)
/* handle old style win smtp sending */
- if (TSendMail(INI_STR("SMTP"), &tsm_err, &tsm_errmsg, headers,
subject, to, message, NULL, NULL, NULL TSRMLS_CC) == FAILURE) {
+ if (TSendMail(INI_STR("SMTP"), &tsm_err, &tsm_errmsg, hdr,
subject, to, message, NULL, NULL, NULL TSRMLS_CC) == FAILURE) {
if (tsm_errmsg) {
php_error_docref(NULL TSRMLS_CC, E_WARNING,
"%s", tsm_errmsg);
efree(tsm_errmsg);
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING,
"%s", GetSMErrorText(tsm_err));
}
- return 0;
+ MAIL_RET(0);
}
- return 1;
+ MAIL_RET(1);
#else
- return 0;
+ MAIL_RET(0);
#endif
}
if (extra_cmd != NULL) {
@@ -255,13 +295,13 @@
signal(SIGCHLD, sig_handler);
}
#endif
- return 0;
+ MAIL_RET(0);
}
#endif
fprintf(sendmail, "To: %s\n", to);
fprintf(sendmail, "Subject: %s\n", subject);
- if (headers != NULL) {
- fprintf(sendmail, "%s\n", headers);
+ if (hdr != NULL) {
+ fprintf(sendmail, "%s\n", hdr);
}
fprintf(sendmail, "\n%s\n", message);
ret = pclose(sendmail);
@@ -284,9 +324,9 @@
#endif
#endif
{
- return 0;
+ MAIL_RET(0);
} else {
- return 1;
+ MAIL_RET(1);
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not execute
mail delivery program '%s'", sendmail_path);
@@ -295,10 +335,10 @@
signal(SIGCHLD, sig_handler);
}
#endif
- return 0;
+ MAIL_RET(0);
}
- return 1; /* never reached */
+ MAIL_RET(1); /* never reached */
}
/* }}} */
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php