#include "php_ini.h"
#include "php_globals.h"
#include "php_main.h"
+#include "php_syslog.h"
#include "fopen_wrappers.h"
#include "ext/standard/php_standard.h"
#include "ext/standard/php_string.h"
}
/* }}} */
+/* {{{ PHP_INI_MH
+ */
+static PHP_INI_MH(OnSetLogFilter)
+{
+ const char *filter = ZSTR_VAL(new_value);
+
+ if (!strcmp(filter, "none")) {
+ PG(syslog_filter) = PHP_SYSLOG_FILTER_NONE;
+ return SUCCESS;
+ }
+ if (!strcmp(filter, "no-ctrl")) {
+ PG(syslog_filter) = PHP_SYSLOG_FILTER_NO_CTRL;
+ return SUCCESS;
+ }
+ if (!strcmp(filter, "ascii")) {
+ PG(syslog_filter) = PHP_SYSLOG_FILTER_ASCII;
+ return SUCCESS;
+ }
+
+ return FAILURE;
+}
+/* }}} */
/* {{{ php_disable_functions
*/
#endif
STD_PHP_INI_ENTRY("syslog.facility", "LOG_USER", PHP_INI_SYSTEM, OnSetFacility, syslog_facility, php_core_globals, core_globals)
STD_PHP_INI_ENTRY("syslog.ident", "php", PHP_INI_SYSTEM, OnUpdateString, syslog_ident, php_core_globals, core_globals)
+ STD_PHP_INI_ENTRY("syslog.filter", "no-ctrl", PHP_INI_ALL, OnSetLogFilter, syslog_filter, php_core_globals, core_globals)
PHP_INI_END()
/* }}} */
zend_long syslog_facility;
char *syslog_ident;
zend_bool have_called_openlog;
+ zend_long syslog_filter;
};
break;
}
- if (c != '\n')
+ /* check for NVT ASCII only unless test disabled */
+ if (((0x20 <= c) && (c <= 0x7e)))
smart_string_appendc(&sbuf, c);
- else {
+ else if ((c >= 0x80) && (PG(syslog_filter) != PHP_SYSLOG_FILTER_ASCII))
+ smart_string_appendc(&sbuf, c);
+ else if (c == '\n') {
syslog(priority, "%.*s", (int)sbuf.len, sbuf.c);
smart_string_reset(&sbuf);
+ } else if ((c < 0x20) && (PG(syslog_filter) == PHP_SYSLOG_FILTER_NONE))
+ smart_string_appendc(&sbuf, c);
+ else {
+ const char xdigits[] = "0123456789abcdef";
+
+ smart_string_appendl(&sbuf, "\\x", 2);
+ smart_string_appendc(&sbuf, xdigits[(c / 0x10)]);
+ c &= 0x0f;
+ smart_string_appendc(&sbuf, xdigits[c]);
}
}
#endif
#endif
+/* Syslog filters */
+#define PHP_SYSLOG_FILTER_NONE 0
+#define PHP_SYSLOG_FILTER_NO_CTRL 1
+#define PHP_SYSLOG_FILTER_ASCII 2
+
BEGIN_EXTERN_C()
PHPAPI void php_syslog(int, const char *format, ...);
PHPAPI void php_openlog(const char *, int, int);
; This setting is on by default.
;report_zend_debug = 0
+; Set this to disable filtering control characters (the default).
+; Some loggers only accept NVT-ASCII, others accept anything that's not
+; control characters. If your logger accepts everything, then no filtering
+; is needed at all.
+; Values are: ascii (space-tilde), no_ctrl (all characters space and above),
+; and none (all characters)
+;syslog.filter = ascii
+
; Store the last error/warning message in $php_errormsg (boolean).
; This directive is DEPRECATED.
; Default Value: Off
; This setting is on by default.
;report_zend_debug = 0
+; Set this to disable filtering control characters (the default).
+; Some loggers only accept NVT-ASCII, others accept anything that's not
+; control characters. If your logger accepts everything, then no filtering
+; is needed at all.
+; Values are: ascii (space-tilde), no_ctrl (all characters space and above),
+; and none (all characters)
+;syslog.filter = ascii
+
; Store the last error/warning message in $php_errormsg (boolean). Setting this value
; to On can assist in debugging and is appropriate for development servers. It should
; however be disabled on production servers.