Skip to content

Loading…

Add a timestamp to the mail log #245

Closed
wants to merge 3 commits into from

2 participants

@mj
mj commented

This patch is loosely based on the one in bug #52126 but instead of using a UNIX timestamp it uses the date format also being used by error_log et al.

mj added some commits
@mj mj Add a timestamp to the mail log.
This patch is loosely based on the one in bug #52126 but instead of
using a UNIX timestamp it uses the date format also being used by
error_log et al.
ae5dab4
@mj mj ext/filter support for validating MAC addresses. be3b4a4
@mj mj Treat "+0" and "-0" as valid integers just like var_dump() does.
This fixes bug #54096.
f3c376c
@lstrojny

Your PR looks somewhat messy as it contains a patch for validating MAC addresses. Could you close and reopen a clean one?

@mj
mj commented

My bad, I messed up my branches. Will submit a new PR in a few seconds.

@mj mj closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Dec 24, 2012
  1. @mj

    Add a timestamp to the mail log.

    mj committed
    This patch is loosely based on the one in bug #52126 but instead of
    using a UNIX timestamp it uses the date format also being used by
    error_log et al.
  2. @mj
  3. @mj

    Treat "+0" and "-0" as valid integers just like var_dump() does.

    mj committed
    This fixes bug #54096.
View
2 ext/filter/filter.c
@@ -47,6 +47,7 @@ static const filter_list_entry filter_list[] = {
{ "validate_url", FILTER_VALIDATE_URL, php_filter_validate_url },
{ "validate_email", FILTER_VALIDATE_EMAIL, php_filter_validate_email },
{ "validate_ip", FILTER_VALIDATE_IP, php_filter_validate_ip },
+ { "validate_mac", FILTER_VALIDATE_MAC, php_filter_validate_mac },
{ "string", FILTER_SANITIZE_STRING, php_filter_string },
{ "stripped", FILTER_SANITIZE_STRING, php_filter_string },
@@ -233,6 +234,7 @@ PHP_MINIT_FUNCTION(filter)
REGISTER_LONG_CONSTANT("FILTER_VALIDATE_URL", FILTER_VALIDATE_URL, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("FILTER_VALIDATE_EMAIL", FILTER_VALIDATE_EMAIL, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("FILTER_VALIDATE_IP", FILTER_VALIDATE_IP, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FILTER_VALIDATE_MAC", FILTER_VALIDATE_MAC, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("FILTER_DEFAULT", FILTER_DEFAULT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("FILTER_UNSAFE_RAW", FILTER_UNSAFE_RAW, CONST_CS | CONST_PERSISTENT);
View
3 ext/filter/filter_private.h
@@ -63,7 +63,8 @@
#define FILTER_VALIDATE_URL 0x0111
#define FILTER_VALIDATE_EMAIL 0x0112
#define FILTER_VALIDATE_IP 0x0113
-#define FILTER_VALIDATE_LAST 0x0113
+#define FILTER_VALIDATE_MAC 0x0114
+#define FILTER_VALIDATE_LAST 0x0114
#define FILTER_VALIDATE_ALL 0x0100
View
53 ext/filter/logical_filters.c
@@ -80,6 +80,11 @@ static int php_filter_parse_int(const char *str, unsigned int str_len, long *ret
break;
}
+ if (*str == '0' && str + 1 == end) {
+ /* Special cases: +0 and -0 */
+ return 1;
+ }
+
/* must start with 1..9*/
if (str < end && *str >= '1' && *str <= '9') {
ctx_value = ((sign)?-1:1) * ((*(str++)) - '0');
@@ -779,6 +784,54 @@ void php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
}
/* }}} */
+void php_filter_validate_mac(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
+{
+ char *input = Z_STRVAL_P(value);
+ int input_len = Z_STRLEN_P(value);
+ int tokens, length, i, offset;
+ char separator;
+ long ret = 0;
+
+ if (14 == input_len) {
+ /* EUI-64 format: Four hexadecimal digits separated by dots. Less
+ * commonly used but valid nonetheless.
+ */
+ tokens = 3;
+ length = 4;
+ separator = '.';
+ } else if (17 == input_len && memchr(input + 2, '-', 1)) {
+ /* IEEE 802 format: Six hexadecimal digits separated by hyphens. */
+ tokens = 6;
+ length = 2;
+ separator = '-';
+ } else if (17 == input_len && memchr(input + 2, ':', 1)) {
+ /* IEEE 802 format: Six hexadecimal digits separated by colons. */
+ tokens = 6;
+ length = 2;
+ separator = ':';
+ } else {
+ RETURN_VALIDATION_FAILED;
+ }
+
+ /* Essentially what we now have is a set of tokens each consisting of
+ * a hexadecimal number followed by a separator character. (With the
+ * exception of the last token which does not have the separator.)
+ */
+ for (i = 0; i < tokens; i++) {
+ offset = i * (length + 1);
+
+ if (i < tokens - 1 && !memchr(input + offset + length, separator, 1)) {
+ /* The current token did not end with e.g. a "." */
+ RETURN_VALIDATION_FAILED
+ }
+ if (php_filter_parse_hex(input + offset, length, &ret) < 0) {
+ /* The current token is no valid hexadecimal digit */
+ RETURN_VALIDATION_FAILED
+ }
+ }
+}
+/* }}} */
+
/*
* Local variables:
* tab-width: 4
View
1 ext/filter/php_filter.h
@@ -78,6 +78,7 @@ void php_filter_validate_regexp(PHP_INPUT_FILTER_PARAM_DECL);
void php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL);
void php_filter_validate_email(PHP_INPUT_FILTER_PARAM_DECL);
void php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL);
+void php_filter_validate_mac(PHP_INPUT_FILTER_PARAM_DECL);
void php_filter_string(PHP_INPUT_FILTER_PARAM_DECL);
void php_filter_encoded(PHP_INPUT_FILTER_PARAM_DECL);
View
26 ext/filter/tests/008.phpt
@@ -11,7 +11,7 @@ var_dump(filter_list(array()));
echo "Done\n";
?>
--EXPECTF--
-array(19) {
+array(20) {
[0]=>
string(3) "int"
[1]=>
@@ -27,28 +27,30 @@ array(19) {
[6]=>
string(11) "validate_ip"
[7]=>
- string(6) "string"
+ string(12) "validate_mac"
[8]=>
- string(8) "stripped"
+ string(6) "string"
[9]=>
- string(7) "encoded"
+ string(8) "stripped"
[10]=>
- string(13) "special_chars"
+ string(7) "encoded"
[11]=>
- string(18) "full_special_chars"
+ string(13) "special_chars"
[12]=>
- string(10) "unsafe_raw"
+ string(18) "full_special_chars"
[13]=>
- string(5) "email"
+ string(10) "unsafe_raw"
[14]=>
- string(3) "url"
+ string(5) "email"
[15]=>
- string(10) "number_int"
+ string(3) "url"
[16]=>
- string(12) "number_float"
+ string(10) "number_int"
[17]=>
- string(12) "magic_quotes"
+ string(12) "number_float"
[18]=>
+ string(12) "magic_quotes"
+ [19]=>
string(8) "callback"
}
View
39 ext/filter/tests/033.phpt
@@ -10,22 +10,23 @@ default_charset=UTF-8
include dirname(__FILE__) . '/033_run.inc';
?>
--EXPECT--
-int 1 123
-boolean 1
-float 1 123
-validate_regexp O'Henry
-validate_url http://a.b.c
-validate_email foo@bar.com
-validate_ip 1.2.3.4
-string PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc() O&#39;Henry 하퍼
-stripped PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc() O&#39;Henry 하퍼
-encoded PHP 1 foo%40bar.com http%3A%2F%2Fa.b.c 1.2.3.4 123 123abc%3C%3E%28%29 O%27Henry %ED%95%98%ED%8D%BC
-special_chars PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc&#60;&#62;() O&#39;Henry 하퍼
-full_special_chars PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc&lt;&gt;() O&#039;Henry 하퍼
-unsafe_raw PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc<>() O'Henry 하퍼
-email PHP 1 foo@bar.com httpa.b.c 1.2.3.4 123 123abc O'Henry
-url PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc<>() O'Henry
-number_int 1 1234 123 123
-number_float 1 1234 123 123
-magic_quotes PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc<>() O\'Henry 하퍼
-callback PHP 1 FOO@BAR.COM HTTP://A.B.C 1.2.3.4 123 123ABC<>() O'HENRY 하퍼
+int 1 123
+boolean 1
+float 1 123
+validate_regexp O'Henry
+validate_url http://a.b.c
+validate_email foo@bar.com
+validate_ip 1.2.3.4
+validate_mac aa:bb:cc:dd:ee:ff
+string PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc() O&#39;Henry 하퍼 aa:bb:cc:dd:ee:ff
+stripped PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc() O&#39;Henry 하퍼 aa:bb:cc:dd:ee:ff
+encoded PHP 1 foo%40bar.com http%3A%2F%2Fa.b.c 1.2.3.4 123 123abc%3C%3E%28%29 O%27Henry %ED%95%98%ED%8D%BCaa%3Abb%3Acc%3Add%3Aee%3Aff
+special_chars PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc&#60;&#62;() O&#39;Henry 하퍼 aa:bb:cc:dd:ee:ff
+full_special_chars PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc&lt;&gt;() O&#039;Henry 하퍼 aa:bb:cc:dd:ee:ff
+unsafe_raw PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc<>() O'Henry 하퍼 aa:bb:cc:dd:ee:ff
+email PHP 1 foo@bar.com httpa.b.c 1.2.3.4 123 123abc O'Henry aabbccddeeff
+url PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc<>() O'Henry aa:bb:cc:dd:ee:ff
+number_int 1 1234 123 123
+number_float 1 1234 123 123
+magic_quotes PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc<>() O\'Henry 하퍼 aa:bb:cc:dd:ee:ff
+callback PHP 1 FOO@BAR.COM HTTP://A.B.C 1.2.3.4 123 123ABC<>() O'HENRY 하퍼 AA:BB:CC:DD:EE:FF
View
6 ext/filter/tests/033_run.inc
@@ -16,7 +16,8 @@ $data = array(
"123",
"123abc<>()",
"O'Henry",
- "하퍼"
+ "하퍼",
+ "aa:bb:cc:dd:ee:ff",
);
@@ -35,6 +36,7 @@ foreach(filter_list() as $filter) {
printf("%-5s",$result[5]);
printf("%-20s",$result[6]);
printf("%-15s",$result[7]);
- printf("%-10s\n",$result[8]);
+ printf("%-10s",$result[8]);
+ printf("%-10s\n",$result[9]);
}
?>
View
34 ext/filter/tests/055.phpt
@@ -0,0 +1,34 @@
+--TEST--
+filter_var() and FILTER_VALIDATE_MAC
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$values = Array(
+ "01-23-45-67-89-ab",
+ "01-23-45-67-89-AB",
+ "01-23-45-67-89-aB",
+ "01:23:45:67:89:ab",
+ "01:23:45:67:89:AB",
+ "01:23:45:67:89:aB",
+ "01:23:45-67:89:aB",
+ "xx:23:45:67:89:aB",
+ "0123.4567.89ab",
+);
+foreach ($values as $value) {
+ var_dump(filter_var($value, FILTER_VALIDATE_MAC));
+}
+
+echo "Done\n";
+?>
+--EXPECT--
+string(17) "01-23-45-67-89-ab"
+string(17) "01-23-45-67-89-AB"
+string(17) "01-23-45-67-89-aB"
+string(17) "01:23:45:67:89:ab"
+string(17) "01:23:45:67:89:AB"
+string(17) "01:23:45:67:89:aB"
+bool(false)
+bool(false)
+string(14) "0123.4567.89ab"
+Done
View
4 ext/filter/tests/filter_data.phpt
@@ -10,6 +10,8 @@ precision=14
/* Integer */
$data = "-123"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
$data = "0"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = "-0"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = "+0"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
$data = "123"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
$data = -123; var_dump(filter_var($data, FILTER_VALIDATE_INT));
$data = 0; var_dump(filter_var($data, FILTER_VALIDATE_INT));
@@ -46,6 +48,8 @@ $data = ""; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
--EXPECT--
int(-123)
int(0)
+int(0)
+int(0)
int(123)
int(-123)
int(0)
View
13 ext/standard/mail.c
@@ -21,10 +21,12 @@
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
+#include <time.h>
#include "php.h"
#include "ext/standard/info.h"
#include "ext/standard/php_string.h"
#include "ext/standard/basic_functions.h"
+#include "ext/date/php_date.h"
#if HAVE_SYSEXITS_H
#include <sysexits.h>
@@ -246,8 +248,15 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
return val; \
if (mail_log && *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 : "");
+ char *tmp, *date_str;
+ time_t curtime;
+
+ time(&curtime);
+ date_str = php_format_date("d-M-Y H:i:s e", 13, curtime, 1 TSRMLS_CC);
+
+ int l = spprintf(&tmp, 0, "[%s] mail() on [%s:%d]: To: %s -- Headers: %s\n", date_str, zend_get_executed_filename(TSRMLS_C), zend_get_executed_lineno(TSRMLS_C), to, hdr ? hdr : "");
+
+ efree(date_str);
if (hdr) {
php_mail_log_crlf_to_spaces(tmp);
Something went wrong with that request. Please try again.