An error occurred while loading the file. Please try again.
-
Côme Chilliet authored
issue #6057
Unverified510b8fa9
<?php
/*
This code is part of FusionDirectory (http://www.fusiondirectory.org/)
Copyright (C) 2003-2010 Cajus Pollmeier
Copyright (C) 2011-2016 FusionDirectory
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*/
/*!
* \file php_setup.inc
* Source code for php_setup
*/
require_once("variables.inc");
function html_trace ($errstr = "")
{
static $hideArgs = [
'ldap_init' => [3],
'userinfo/loginUser' => [1],
'change_password' => [1],
'cred_decrypt' => [0,1],
'LDAP/__construct' => [1],
];
if (!function_exists('debug_backtrace')) {
return ['', ''];
}
$trace = array_slice(debug_backtrace(), 1);
$loc = '';
if (isset($trace[0]['file'])) {
$loc = ' - '._('File').': '.$trace[0]['file'];
if (isset($trace[0]['line'])) {
$loc .= ' ('._('Line').' '.$trace[0]['line'].')';
}
}
$return_html = '<table width="100%" style="background-color:#402005;color:white;border:2px solid red;border-spacing:0;border-collapse:collapse;">'.
'<tr><td colspan="3">'.
'<h1 style="color:white">'._('PHP error').' "'.$errstr.'"'.$loc.'</h1>'.
'</td></tr>';
$return_mailto = rawurlencode('=== Trace ===');
/* Generate trace history */
for ($index = 1, $c = count($trace); $index < $c; $index++) {
$ct = $trace[$index];
$loc = '';
$func = '';
if (isset($ct['class'])) {
$loc .= _("class")." ".$ct['class'];
$func .= $ct['class'];
if (isset($ct['function'])) {
$loc .= ' / ';
$func .= '/';
}
}
if (isset($ct['function'])) {
$loc .= _("function")." ".$ct['function'];
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
$func .= $ct['function'];
}
if (isset($ct['type'])) {
switch ($ct['type']) {
case "::":
$type = _("static");
break;
case "->":
$type = _("method");
break;
default:
$type = 'unknown';
break;
}
} else {
$type = "-";
}
$args = "";
if (isset($ct['args'])) {
if (isset($hideArgs[$func])) {
$hideArgsIndexes = $hideArgs[$func];
} else {
$hideArgsIndexes = [];
}
$f = function ($index, $arg) use (&$f, $hideArgsIndexes)
{
static $i = 0;
if (($i == 0) && in_array($index, $hideArgsIndexes)) {
return '***';
}
if ($i > 4) {
return '…';
}
if (is_object($arg)) {
return "CLASS: ".get_class($arg);
} elseif (is_array($arg)) { /* Avoid converting array to string errors */
$i++;
$ret = "array(".implode(',', array_map($f, array_keys($arg), $arg)).")";
$i--;
return $ret;
} else {
if (strlen("$arg") > 512) {
$arg = substr("$arg", 0, 512)."…";
}
return '"'.htmlentities("$arg", ENT_COMPAT, 'UTF-8').'"';
}
};
$args = implode(',', array_map($f, array_keys($ct['args']), $ct['args']));
}
if (empty($args)) {
$args = "-";
}
if (isset($ct['file'])) {
$file = $ct['file'];
} else {
$file = "";
}
if (isset($ct['line'])) {
$line = $ct['line'];
} else {
$line = "";
}
$color = ($index & 1) ? '#404040' : '606060';
$return_html .= "<tr style='background-color:$color'><td style='padding-left:20px' width=\"30%\">"._("Trace")."[$index]: $loc</td>";
$return_html .= "<td>"._("File").": $file ("._('Line')." $line)</td><td width=\"10%\">"._("Type").": $type</td></tr>";
$return_html .= "<tr style='background-color:$color'><td colspan=3 style='padding-left:20px;'>"._("Arguments").": $args</td></tr>";
/* Add trace part to mailto body */
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
$return_mailto .= rawurlencode(
"\nTrace[".$index."]:".$loc.
"\nFile : ".$file.
"\nLine : ".$line.
"\nType : ".$type.
"\n ".$args.
"\n");
}
$return_html .= "</table>";
$return_mailto .= rawurlencode("=== /Trace ===");
return [$return_html, $return_mailto];
}
/*!
* \brief Raise an error
*
* \param string $errno
*
* \param string $errstr The error string
*
* \param string $errfile The error filename
*
* \param string $errline The error line
*/
function gosaRaiseError ($errno, $errstr, $errfile, $errline)
{
global $error_collector,$config, $error_collector_mailto;
// To avoid recursion - restore original error handler.
restore_error_handler();
/* Return if error reporting is set to zero */
if (error_reporting() == 0) {
set_error_handler('gosaRaiseError', E_WARNING | E_NOTICE | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_STRICT);
return FALSE;
}
/* Workaround for buggy imap_open error outputs */
if (preg_match('/imap_open/', $errstr)) {
set_error_handler('gosaRaiseError', E_WARNING | E_NOTICE | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_STRICT);
return;
}
/* Hide ldap size limit messages */
if (preg_match('/ldap_error/', $errstr) && preg_match('/sizelimit/', $errstr)) {
set_error_handler('gosaRaiseError', E_WARNING | E_NOTICE | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_STRICT);
return;
}
/* Send all errors to logging class, except "Ldap : No such object" messages*/
if (class_exists('logging') && !preg_match('/No such object/', $errstr)) {
logging::log('error', 'php', $errfile, [], 'Type:'.$errno.', Message:'.$errstr.', File:'.$errfile.', Line: '.$errline);
}
/* Error messages are hidden in FusionDirectory, so we only send them to the logging class and abort here */
if (isset($config->data) && $config->get_cfg_value('displayerrors') != 'TRUE') {
set_error_handler('gosaRaiseError', E_WARNING | E_NOTICE | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_STRICT);
return;
}
/* Create header as needed */
if ($error_collector == "") {
/* Mailto body header */
$version = FD_VERSION;
$error_collector_mailto .= rawurlencode(
"Oups. Seems like you've catched some kind of bug inside FusionDirectory/PHP. You may want to help ".