mirror of
https://github.com/php/php-src.git
synced 2025-08-19 17:04:47 +02:00
MFB: Added mail logging functionality that allows logging of mail sent via
mail() function
This commit is contained in:
parent
3bc6285560
commit
968e7af6cf
5 changed files with 68 additions and 11 deletions
|
@ -23,6 +23,8 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "php.h"
|
#include "php.h"
|
||||||
#include "ext/standard/info.h"
|
#include "ext/standard/info.h"
|
||||||
|
#include "ext/standard/php_string.h"
|
||||||
|
#include "ext/standard/basic_functions.h"
|
||||||
|
|
||||||
#if HAVE_SYSEXITS_H
|
#if HAVE_SYSEXITS_H
|
||||||
#include <sysexits.h>
|
#include <sysexits.h>
|
||||||
|
@ -66,6 +68,8 @@
|
||||||
*p = ' '; \
|
*p = ' '; \
|
||||||
} \
|
} \
|
||||||
|
|
||||||
|
extern long php_getuid(void);
|
||||||
|
|
||||||
/* {{{ proto int ezmlm_hash(string addr) U
|
/* {{{ proto int ezmlm_hash(string addr) U
|
||||||
Calculate EZMLM list hash value. */
|
Calculate EZMLM list hash value. */
|
||||||
PHP_FUNCTION(ezmlm_hash)
|
PHP_FUNCTION(ezmlm_hash)
|
||||||
|
@ -193,25 +197,61 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
|
||||||
int ret;
|
int ret;
|
||||||
char *sendmail_path = INI_STR("sendmail_path");
|
char *sendmail_path = INI_STR("sendmail_path");
|
||||||
char *sendmail_cmd = NULL;
|
char *sendmail_cmd = NULL;
|
||||||
|
char *mail_log = INI_STR("mail.log");
|
||||||
|
char *hdr = headers;
|
||||||
#if PHP_SIGCHILD
|
#if PHP_SIGCHILD
|
||||||
void (*sig_handler)() = NULL;
|
void (*sig_handler)() = NULL;
|
||||||
#endif
|
#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 (!sendmail_path) {
|
||||||
#if (defined PHP_WIN32 || defined NETWARE)
|
#if (defined PHP_WIN32 || defined NETWARE)
|
||||||
/* handle old style win smtp sending */
|
/* 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) {
|
if (tsm_errmsg) {
|
||||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", tsm_errmsg);
|
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", tsm_errmsg);
|
||||||
efree(tsm_errmsg);
|
efree(tsm_errmsg);
|
||||||
} else {
|
} else {
|
||||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", GetSMErrorText(tsm_err));
|
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", GetSMErrorText(tsm_err));
|
||||||
}
|
}
|
||||||
return 0;
|
MAIL_RET(0);
|
||||||
}
|
}
|
||||||
return 1;
|
MAIL_RET(1);
|
||||||
#else
|
#else
|
||||||
return 0;
|
MAIL_RET(0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (extra_cmd != NULL) {
|
if (extra_cmd != NULL) {
|
||||||
|
@ -255,13 +295,13 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
|
||||||
signal(SIGCHLD, sig_handler);
|
signal(SIGCHLD, sig_handler);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
MAIL_RET(0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
fprintf(sendmail, "To: %s\n", to);
|
fprintf(sendmail, "To: %s\n", to);
|
||||||
fprintf(sendmail, "Subject: %s\n", subject);
|
fprintf(sendmail, "Subject: %s\n", subject);
|
||||||
if (headers != NULL) {
|
if (hdr != NULL) {
|
||||||
fprintf(sendmail, "%s\n", headers);
|
fprintf(sendmail, "%s\n", hdr);
|
||||||
}
|
}
|
||||||
fprintf(sendmail, "\n%s\n", message);
|
fprintf(sendmail, "\n%s\n", message);
|
||||||
ret = pclose(sendmail);
|
ret = pclose(sendmail);
|
||||||
|
@ -284,9 +324,9 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
return 0;
|
MAIL_RET(0);
|
||||||
} else {
|
} else {
|
||||||
return 1;
|
MAIL_RET(1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not execute mail delivery program '%s'", sendmail_path);
|
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not execute mail delivery program '%s'", sendmail_path);
|
||||||
|
@ -295,10 +335,10 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
|
||||||
signal(SIGCHLD, sig_handler);
|
signal(SIGCHLD, sig_handler);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
MAIL_RET(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1; /* never reached */
|
MAIL_RET(1); /* never reached */
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
|
|
@ -539,6 +539,8 @@ PHP_INI_BEGIN()
|
||||||
|
|
||||||
PHP_INI_ENTRY("SMTP", "localhost",PHP_INI_ALL, NULL)
|
PHP_INI_ENTRY("SMTP", "localhost",PHP_INI_ALL, NULL)
|
||||||
PHP_INI_ENTRY("smtp_port", "25", 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("browscap", NULL, PHP_INI_SYSTEM, NULL)
|
||||||
PHP_INI_ENTRY("memory_limit", "128M", PHP_INI_ALL, OnChangeMemoryLimit)
|
PHP_INI_ENTRY("memory_limit", "128M", PHP_INI_ALL, OnChangeMemoryLimit)
|
||||||
PHP_INI_ENTRY("precision", "14", PHP_INI_ALL, OnSetPrecision)
|
PHP_INI_ENTRY("precision", "14", PHP_INI_ALL, OnSetPrecision)
|
||||||
|
|
|
@ -151,6 +151,9 @@ struct _php_core_globals {
|
||||||
long user_ini_cache_ttl;
|
long user_ini_cache_ttl;
|
||||||
|
|
||||||
char *request_order;
|
char *request_order;
|
||||||
|
|
||||||
|
zend_bool mail_x_header;
|
||||||
|
char *mail_log;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -669,6 +669,12 @@ smtp_port = 25
|
||||||
; the 5th parameter to mail(), even in safe mode.
|
; the 5th parameter to mail(), even in safe mode.
|
||||||
;mail.force_extra_parameters =
|
;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]
|
||||||
sql.safe_mode = Off
|
sql.safe_mode = Off
|
||||||
|
|
||||||
|
|
|
@ -706,6 +706,12 @@ smtp_port = 25
|
||||||
; the 5th parameter to mail(), even in safe mode.
|
; the 5th parameter to mail(), even in safe mode.
|
||||||
;mail.force_extra_parameters =
|
;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]
|
||||||
sql.safe_mode = Off
|
sql.safe_mode = Off
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue