示例#1
0
function access_denied()
{
    if (!auth_is_user_authenticated()) {
        if (basename($_SERVER['SCRIPT_NAME']) != 'login_page.php') {
            $t_return_page = $_SERVER['PHP_SELF'];
            if (isset($_SERVER['QUERY_STRING'])) {
                $t_return_page .= '?' . $_SERVER['QUERY_STRING'];
            }
            $t_return_page = string_url(string_sanitize_url($t_return_page));
            print_header_redirect('login_page.php?return=' . $t_return_page);
        }
    } else {
        if (auth_get_current_user_id() == user_get_id_by_name(config_get_global('anonymous_account'))) {
            if (basename($_SERVER['SCRIPT_NAME']) != 'login_page.php') {
                $t_return_page = $_SERVER['PHP_SELF'];
                if (isset($_SERVER['QUERY_STRING'])) {
                    $t_return_page .= '?' . $_SERVER['QUERY_STRING'];
                }
                $t_return_page = string_url(string_sanitize_url($t_return_page));
                echo '<center>';
                echo '<p>' . error_string(ERROR_ACCESS_DENIED) . '</p>';
                print_bracket_link('login_page.php?return=' . $t_return_page, lang_get('click_to_login'));
                echo '<p></p>';
                print_bracket_link('main_page.php', lang_get('proceed'));
                echo '</center>';
            }
        } else {
            echo '<center>';
            echo '<p>' . error_string(ERROR_ACCESS_DENIED) . '</p>';
            print_bracket_link('main_page.php', lang_get('proceed'));
            echo '</center>';
        }
    }
    exit;
}
示例#2
0
function check_print_error_rows()
{
    global $g_show_errors, $g_errors_temporarily_suppressed, $g_errors_raised;
    if (!$g_show_errors || $g_errors_temporarily_suppressed) {
        $g_errors_raised = array();
        return;
    }
    foreach ($g_errors_raised as $t_error) {
        # build an appropriate error string
        switch ($t_error['type']) {
            case E_WARNING:
                $t_error_type = 'SYSTEM WARNING';
                $t_error_description = htmlentities($t_error['error']);
                break;
            case E_NOTICE:
                $t_error_type = 'SYSTEM NOTICE';
                $t_error_description = htmlentities($t_error['error']);
                break;
            case E_USER_ERROR:
                $t_error_type = 'APPLICATION ERROR #' . $t_error['error'];
                $t_error_description = htmlentities(error_string($t_error['error']));
                break;
            case E_USER_WARNING:
                $t_error_type = 'APPLICATION WARNING #' . $t_error['error'];
                $t_error_description = htmlentities(error_string($t_error['error']));
                break;
            case E_USER_NOTICE:
                # used for debugging
                $t_error_type = 'DEBUG';
                $t_error_description = htmlentities($t_error['error']);
                break;
            default:
                # shouldn't happen, just display the error just in case
                $t_error_type = '';
                $t_error_description = htmlentities($t_error['error']);
        }
        echo "\t<tr>\n\t\t<td colspan=\"2\" class=\"error\">";
        echo "<strong>{$t_error_type}:</strong> {$t_error_description}<br />";
        echo '<em>Raised in file ' . htmlentities($t_error['file']) . ' on line ' . htmlentities($t_error['line']) . '</em>';
        echo "</td>\n\t</tr>\n";
    }
    $g_errors_raised = array();
}
示例#3
0
/**
 * JSON error handler
 * 
 * <p>Ensures that all necessary headers are set and terminates processing after being invoked.</p>
 */
function json_error_handler($p_type, $p_error, $p_file, $p_line, $p_context)
{
    # flush any language overrides to return to user's natural default
    if (function_exists('db_is_connected')) {
        if (db_is_connected()) {
            lang_push(lang_get_default());
        }
    }
    $t_error_code = ERROR_GENERIC;
    // default
    # build an appropriate error string
    switch ($p_type) {
        case E_WARNING:
            $t_error_type = 'SYSTEM WARNING';
            $t_error_description = $p_error;
            break;
        case E_NOTICE:
            $t_error_type = 'SYSTEM NOTICE';
            $t_error_description = $p_error;
            break;
        case E_USER_ERROR:
            $t_error_type = "APPLICATION ERROR #{$p_error}";
            $t_error_code = $p_error;
            $t_error_description = error_string($p_error);
            break;
        case E_USER_WARNING:
            $t_error_type = "APPLICATION WARNING #{$p_error}";
            $t_error_code = $p_error;
            $t_error_description = error_string($p_error);
            break;
        case E_USER_NOTICE:
            # used for debugging
            $t_error_type = 'DEBUG';
            $t_error_description = $p_error;
            break;
        default:
            #shouldn't happen, just display the error just in case
            $t_error_type = '';
            $t_error_description = $p_error;
    }
    json_output_raw(array('status' => 'ERROR', 'error' => array('code' => $t_error_code, 'type' => $t_error_type, 'message' => $t_error_description), 'contents' => $t_error_description));
}
示例#4
0
function access_denied()
{
    if (!php_version_at_least('4.1.0')) {
        global $_SERVER;
    }
    if (!auth_is_user_authenticated()) {
        if (basename($_SERVER['SCRIPT_NAME']) != 'login_page.php') {
            if (!isset($_SERVER['REQUEST_URI'])) {
                if (!isset($_SERVER['QUERY_STRING'])) {
                    $_SERVER['QUERY_STRING'] = '';
                }
                $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING'];
            }
            $t_return_page = string_url($_SERVER['REQUEST_URI']);
            print_header_redirect('login_page.php?return=' . $t_return_page);
        }
    } else {
        echo '<center>';
        echo '<p>' . error_string(ERROR_ACCESS_DENIED) . '</p>';
        print_bracket_link('main_page.php', lang_get('proceed'));
        echo '</center>';
    }
    exit;
}
示例#5
0
/**
 *
 * @access public
 */
function auth_http_prompt()
{
    header('HTTP/1.0 401 Authorization Required');
    header('WWW-Authenticate: Basic realm="' . lang_get('http_auth_realm') . '"');
    header('status: 401 Unauthorized');
    echo '<center>';
    echo '<p>' . error_string(ERROR_ACCESS_DENIED) . '</p>';
    print_bracket_link('main_page.php', lang_get('proceed'));
    echo '</center>';
    exit;
}
示例#6
0
?>
		</td>
	</tr>
	<tr <?php 
echo helper_alternate_class();
?>
 valign="top">
		<th class="category">
			<?php 
echo lang_get('realname');
?>
		</th>
		<td>
			<?php 
if (!($t_can_manage || $t_can_see_realname)) {
    print error_string(ERROR_ACCESS_DENIED);
} else {
    echo string_display_line($u_realname);
}
?>
		</td>
	</tr>
	<?php 
if ($t_can_manage) {
    ?>
	<tr>
		<td colspan="2" class="center">
			<?php 
    print_bracket_link('manage_user_edit_page.php?user_id=' . $f_user_id, lang_get('manage_user'));
    ?>
		</td>
示例#7
0
/**
 * Default error handler
 *
 * This handler will not receive E_ERROR, E_PARSE, E_CORE_*, or E_COMPILE_*
 *  errors.
 *
 * E_USER_* are triggered by us and will contain an error constant in $p_error
 * The others, being system errors, will come with a string in $p_error
 *
 * @access private
 * @param integer $p_type    Contains the level of the error raised, as an integer.
 * @param string  $p_error   Contains the error message, as a string.
 * @param string  $p_file    Contains the filename that the error was raised in, as a string.
 * @param integer $p_line    Contains the line number the error was raised at, as an integer.
 * @param array   $p_context To the active symbol table at the point the error occurred (optional).
 * @return void
 * @uses lang_api.php
 * @uses config_api.php
 * @uses compress_api.php
 * @uses database_api.php (optional)
 * @uses html_api.php (optional)
 */
function error_handler($p_type, $p_error, $p_file, $p_line, array $p_context)
{
    global $g_error_parameters, $g_error_handled, $g_error_proceed_url;
    global $g_error_send_page_header;
    # check if errors were disabled with @ somewhere in this call chain
    if (0 == error_reporting()) {
        return;
    }
    $t_lang_pushed = false;
    $t_db_connected = false;
    if (function_exists('db_is_connected')) {
        if (db_is_connected()) {
            $t_db_connected = true;
        }
    }
    $t_html_api = false;
    if (function_exists('html_end')) {
        $t_html_api = true;
    }
    # flush any language overrides to return to user's natural default
    if ($t_db_connected) {
        lang_push(lang_get_default());
        $t_lang_pushed = true;
    }
    $t_method_array = config_get_global('display_errors');
    if (isset($t_method_array[$p_type])) {
        $t_method = $t_method_array[$p_type];
    } else {
        if (isset($t_method_array[E_ALL])) {
            $t_method = $t_method_array[E_ALL];
        } else {
            $t_method = 'none';
        }
    }
    # build an appropriate error string
    $t_error_location = 'in \'' . $p_file . '\' line ' . $p_line;
    $t_error_description = '\'' . $p_error . '\' ' . $t_error_location;
    switch ($p_type) {
        case E_WARNING:
            $t_error_type = 'SYSTEM WARNING';
            break;
        case E_NOTICE:
            $t_error_type = 'SYSTEM NOTICE';
            break;
        case E_STRICT:
            $t_error_type = 'STRICT NOTICE';
            break;
        case E_RECOVERABLE_ERROR:
            # This should generally be considered fatal (like E_ERROR)
            $t_error_type = 'SYSTEM ERROR';
            break;
        case E_DEPRECATED:
            $t_error_type = 'DEPRECATED';
            break;
        case E_USER_ERROR:
            $t_error_type = 'APPLICATION ERROR #' . $p_error;
            $t_error_description = error_string($p_error);
            if ($t_method == DISPLAY_ERROR_INLINE) {
                $t_error_description .= ' (' . $t_error_location . ")\n" . error_string(ERROR_DISPLAY_USER_ERROR_INLINE);
            }
            break;
        case E_USER_WARNING:
            $t_error_type = 'APPLICATION WARNING #' . $p_error;
            $t_error_description = error_string($p_error) . ' (' . $t_error_location . ')';
            break;
        case E_USER_NOTICE:
            # used for debugging
            $t_error_type = 'DEBUG';
            break;
        case E_USER_DEPRECATED:
            # Get the parent of the call that triggered the error to facilitate
            # debugging with a more useful filename and line number
            $t_stack = debug_backtrace();
            $t_caller = $t_stack[2];
            $t_error_type = 'WARNING';
            $t_error_description = error_string($p_error) . ' (in ' . $t_caller['file'] . ' line ' . $t_caller['line'] . ')';
            if ($t_method == DISPLAY_ERROR_INLINE && php_sapi_name() != 'cli') {
                # Enqueue messages for later display with error_print_delayed()
                global $g_errors_delayed;
                $g_errors_delayed[] = $t_error_description;
                $g_error_handled = true;
                return;
            }
            break;
        default:
            # shouldn't happen, just display the error just in case
            $t_error_type = 'UNHANDLED ERROR TYPE (' . '<a href="http://php.net/errorfunc.constants">' . $p_type . '</a>)';
            $t_error_description = $p_error . ' (' . $t_error_location . ')';
    }
    $t_error_description = nl2br($t_error_description);
    if (php_sapi_name() == 'cli') {
        if (DISPLAY_ERROR_NONE != $t_method) {
            echo $t_error_type . ': ' . $t_error_description . "\n";
            if (ON == config_get_global('show_detailed_errors')) {
                echo "\n";
                debug_print_backtrace();
            }
        }
        if (DISPLAY_ERROR_HALT == $t_method) {
            exit(1);
        }
    } else {
        switch ($t_method) {
            case DISPLAY_ERROR_HALT:
                # disable any further event callbacks
                if (function_exists('event_clear_callbacks')) {
                    event_clear_callbacks();
                }
                $t_oblen = ob_get_length();
                if ($t_oblen > 0) {
                    $t_old_contents = ob_get_contents();
                    if (!error_handled()) {
                        # Retrieve the previously output header
                        if (false !== preg_match_all('|^(.*)(</head>.*$)|is', $t_old_contents, $t_result) && isset($t_result[1]) && isset($t_result[1][0])) {
                            $t_old_headers = $t_result[1][0];
                            unset($t_old_contents);
                        }
                    }
                }
                # We need to ensure compression is off - otherwise the compression headers are output.
                compress_disable();
                # then clean the buffer, leaving output buffering on.
                if ($t_oblen > 0) {
                    ob_clean();
                }
                # If HTML error output was disabled, set an error header and stop
                if (defined('DISABLE_INLINE_ERROR_REPORTING')) {
                    # @TODO Have a mapping for mantis error codes to appropiate HTTP error codes
                    header(' ', true, 400);
                    exit(1);
                }
                # don't send the page header information if it has already been sent
                if ($g_error_send_page_header) {
                    if ($t_html_api) {
                        html_page_top1();
                        if ($p_error != ERROR_DB_QUERY_FAILED && $t_db_connected == true) {
                            html_page_top2();
                        } else {
                            html_page_top2a();
                        }
                    } else {
                        echo '<html><head><title>', $t_error_type, '</title></head><body>';
                    }
                } else {
                    # Output the previously sent headers, if defined
                    if (isset($t_old_headers)) {
                        echo $t_old_headers, "\n";
                        html_page_top2();
                    }
                }
                echo '<div id="error-msg">';
                echo '<div class="error-type">' . $t_error_type . '</div>';
                echo '<div class="error-description">', $t_error_description, '</div>';
                echo '<div class="error-info">';
                if (null === $g_error_proceed_url) {
                    echo lang_get('error_no_proceed');
                } else {
                    echo '<a href="', $g_error_proceed_url, '">', lang_get('proceed'), '</a>';
                }
                echo '</div>';
                if (ON == config_get_global('show_detailed_errors')) {
                    echo '<div class="error-details">';
                    error_print_details($p_file, $p_line, $p_context);
                    echo '</div>';
                    echo '<div class="error-trace">';
                    error_print_stack_trace();
                    echo '</div>';
                }
                echo '</div>';
                if (isset($t_old_contents)) {
                    echo '<div class="warning">Previous non-fatal errors occurred.  Page contents follow.</div>';
                    echo '<div id="old-contents">';
                    echo $t_old_contents;
                    echo '</div>';
                }
                if ($t_html_api) {
                    if ($p_error != ERROR_DB_QUERY_FAILED && $t_db_connected == true) {
                        html_page_bottom();
                    } else {
                        html_body_end();
                        html_end();
                    }
                } else {
                    echo '</body></html>', "\n";
                }
                exit(1);
            case DISPLAY_ERROR_INLINE:
                if (!defined('DISABLE_INLINE_ERROR_REPORTING')) {
                    echo '<div class="error-inline">', $t_error_type, ': ', $t_error_description, '</div>';
                }
                $g_error_handled = true;
                break;
            default:
                # do nothing - note we treat this as we've not handled an error, so any redirects go through.
        }
    }
    if ($t_lang_pushed) {
        lang_pop();
    }
    $g_error_parameters = array();
    $g_error_proceed_url = null;
}
示例#8
0
/**
 * Default error handler
 *
 * This handler will not receive E_ERROR, E_PARSE, E_CORE_*, or E_COMPILE_*
 *  errors.
 *
 * E_USER_* are triggered by us and will contain an error constant in $p_error
 * The others, being system errors, will come with a string in $p_error
 *
 * @access private
 * @param int p_type contains the level of the error raised, as an integer.
 * @param string p_error contains the error message, as a string.
 * @param string p_file contains the filename that the error was raised in, as a string.
 * @param int p_line contains the line number the error was raised at, as an integer.
 * @param array p_context to the active symbol table at the point the error occurred (optional)
 * @uses lang_api.php
 * @uses config_api.php
 * @uses compress_api.php
 * @uses database_api.php (optional)
 * @uses html_api.php (optional)
 */
function error_handler($p_type, $p_error, $p_file, $p_line, $p_context)
{
    global $g_error_parameters, $g_error_handled, $g_error_proceed_url;
    global $g_lang_overrides;
    global $g_error_send_page_header;
    # check if errors were disabled with @ somewhere in this call chain
    if (0 == error_reporting()) {
        return;
    }
    $t_lang_pushed = false;
    $t_db_connected = false;
    if (function_exists('db_is_connected')) {
        if (db_is_connected()) {
            $t_db_connected = true;
        }
    }
    $t_html_api = false;
    if (function_exists('html_end')) {
        $t_html_api = true;
    }
    # flush any language overrides to return to user's natural default
    if ($t_db_connected) {
        lang_push(lang_get_default());
        $t_lang_pushed = true;
    }
    $t_short_file = basename($p_file);
    $t_method_array = config_get_global('display_errors');
    if (isset($t_method_array[$p_type])) {
        $t_method = $t_method_array[$p_type];
    } else {
        if (isset($t_method_array[E_ALL])) {
            $t_method = $t_method_array[E_ALL];
        } else {
            $t_method = 'none';
        }
    }
    # build an appropriate error string
    switch ($p_type) {
        case E_WARNING:
            $t_error_type = 'SYSTEM WARNING';
            $t_error_description = "'{$p_error}' in '{$p_file}' line {$p_line}";
            break;
        case E_NOTICE:
            $t_error_type = 'SYSTEM NOTICE';
            $t_error_description = "'{$p_error}' in '{$p_file}' line {$p_line}";
            break;
        case E_USER_ERROR:
            $t_error_type = "APPLICATION ERROR #{$p_error}";
            $t_error_description = error_string($p_error);
            if ($t_method == DISPLAY_ERROR_INLINE) {
                $t_error_description .= "\n" . error_string(ERROR_DISPLAY_USER_ERROR_INLINE);
            }
            break;
        case E_USER_WARNING:
            $t_error_type = "APPLICATION WARNING #{$p_error}";
            $t_error_description = error_string($p_error);
            break;
        case E_USER_NOTICE:
            # used for debugging
            $t_error_type = 'DEBUG';
            $t_error_description = $p_error;
            break;
        default:
            # shouldn't happen, just display the error just in case
            $t_error_type = '';
            $t_error_description = $p_error;
    }
    $t_error_description = nl2br($t_error_description);
    switch ($t_method) {
        case DISPLAY_ERROR_HALT:
            # disable any further event callbacks
            if (function_exists('event_clear_callbacks')) {
                event_clear_callbacks();
            }
            $t_oblen = ob_get_length();
            if ($t_oblen > 0) {
                $t_old_contents = ob_get_contents();
                if (!error_handled()) {
                    # Retrieve the previously output header
                    if (false !== preg_match_all('|^(.*)(</head>.*$)|is', $t_old_contents, $result)) {
                        $t_old_headers = $result[1][0];
                        unset($t_old_contents);
                    }
                }
            }
            # We need to ensure compression is off - otherwise the compression headers are output.
            compress_disable();
            # then clean the buffer, leaving output buffering on.
            if ($t_oblen > 0) {
                ob_clean();
            }
            # don't send the page header information if it has already been sent
            if ($g_error_send_page_header) {
                if ($t_html_api) {
                    html_page_top1();
                    if ($p_error != ERROR_DB_QUERY_FAILED && $t_db_connected == true) {
                        html_page_top2();
                    } else {
                        html_page_top2a();
                    }
                } else {
                    echo '<html><head><title>', $t_error_type, '</title></head><body>';
                }
            } else {
                # Output the previously sent headers, if defined
                if (isset($t_old_headers)) {
                    echo $t_old_headers, "\n";
                    html_page_top2();
                }
            }
            echo '<div id="error-msg">';
            echo '<div class="error-type">' . $t_error_type . '</div>';
            echo '<div class="error-description">', $t_error_description, '</div>';
            echo '<div class="error-info">';
            if (null === $g_error_proceed_url) {
                echo lang_get('error_no_proceed');
            } else {
                echo '<a href="', $g_error_proceed_url, '">', lang_get('proceed'), '</a>';
            }
            echo '</div>';
            if (ON == config_get_global('show_detailed_errors')) {
                echo '<div class="error-details">';
                error_print_details($p_file, $p_line, $p_context);
                echo '</div>';
                echo '<div class="error-trace">';
                error_print_stack_trace();
                echo '</div>';
            }
            echo '</div>';
            if (isset($t_old_contents)) {
                echo '<div class="warning">Previous non-fatal errors occurred.  Page contents follow.</div>';
                echo '<div id="old-contents">';
                echo $t_old_contents;
                echo '</div>';
            }
            if ($t_html_api) {
                if ($p_error != ERROR_DB_QUERY_FAILED && $t_db_connected == true) {
                    html_page_bottom();
                } else {
                    html_body_end();
                    html_end();
                }
            } else {
                echo '</body></html>', "\n";
            }
            exit;
        case DISPLAY_ERROR_INLINE:
            echo '<div class="error-inline">', $t_error_type, ': ', $t_error_description, '</div>';
            $g_error_handled = true;
            break;
        default:
            # do nothing - note we treat this as we've not handled an error, so any redirects go through.
    }
    if ($t_lang_pushed) {
        lang_pop();
    }
    $g_error_parameters = array();
    $g_error_proceed_url = null;
}
示例#9
0
/**
 * Function to be called when a user is attempting to access a page that
 * he/she is not authorised to.  This outputs an access denied message then
 * re-directs to the mainpage.
 */
function access_denied()
{
    if (!auth_is_user_authenticated()) {
        if (basename($_SERVER['SCRIPT_NAME']) != 'login_page.php') {
            $t_return_page = $_SERVER['SCRIPT_NAME'];
            if (isset($_SERVER['QUERY_STRING'])) {
                $t_return_page .= '?' . $_SERVER['QUERY_STRING'];
            }
            $t_return_page = string_url(string_sanitize_url($t_return_page));
            print_header_redirect('login_page.php' . '?return=' . $t_return_page);
        }
    } else {
        if (current_user_is_anonymous()) {
            if (basename($_SERVER['SCRIPT_NAME']) != 'login_page.php') {
                $t_return_page = $_SERVER['SCRIPT_NAME'];
                if (isset($_SERVER['QUERY_STRING'])) {
                    $t_return_page .= '?' . $_SERVER['QUERY_STRING'];
                }
                $t_return_page = string_url(string_sanitize_url($t_return_page));
                echo '<p class="center">' . error_string(ERROR_ACCESS_DENIED) . '</p><p class="center">';
                print_bracket_link(helper_mantis_url('login_page.php') . '?return=' . $t_return_page, lang_get('click_to_login'));
                echo '</p><p class="center">';
                print_bracket_link(helper_mantis_url('main_page.php'), lang_get('proceed'));
                echo '</p>';
            }
        } else {
            echo '<p class="center">' . error_string(ERROR_ACCESS_DENIED) . '</p>';
            echo '<p class="center">';
            print_bracket_link(helper_mantis_url('main_page.php'), lang_get('proceed'));
            echo '</p>';
        }
    }
    exit;
}
示例#10
0
function handle_error($errno, $errstr)
{
    throw new HTTPException(500, "Mantis encountered an error: " . error_string($errstr));
    $resp->send();
    exit;
}
示例#11
0
function mc_error_handler($p_type, $p_error, $p_file, $p_line, $p_context)
{
    global $g_error_parameters, $g_error_handled, $g_error_proceed_url;
    global $g_lang_overrides;
    global $g_error_send_page_header;
    global $l_oServer;
    # check if errors were disabled with @ somewhere in this call chain
    # also suppress php 5 strict warnings
    if (0 == error_reporting() || 2048 == $p_type) {
        return;
    }
    $t_lang_pushed = false;
    # flush any language overrides to return to user's natural default
    if (function_exists('db_is_connected')) {
        if (db_is_connected()) {
            lang_push(lang_get_default());
            $t_lang_pushed = true;
        }
    }
    $t_short_file = basename($p_file);
    $t_method_array = config_get('display_errors');
    if (isset($t_method_array[$p_type])) {
        $t_method = $t_method_array[$p_type];
    } else {
        $t_method = 'none';
    }
    # build an appropriate error string
    switch ($p_type) {
        case E_WARNING:
            $t_error_type = 'SYSTEM WARNING';
            $t_error_description = $p_error;
            break;
        case E_NOTICE:
            $t_error_type = 'SYSTEM NOTICE';
            $t_error_description = $p_error;
            break;
        case E_USER_ERROR:
            $t_error_type = "APPLICATION ERROR #{$p_error}";
            $t_error_description = error_string($p_error);
            break;
        case E_USER_WARNING:
            $t_error_type = "APPLICATION WARNING #{$p_error}";
            $t_error_description = error_string($p_error);
            break;
        case E_USER_NOTICE:
            # used for debugging
            $t_error_type = 'DEBUG';
            $t_error_description = $p_error;
            break;
        default:
            #shouldn't happen, just display the error just in case
            $t_error_type = '';
            $t_error_description = $p_error;
    }
    $t_error_description = $t_error_description;
    $t_error_stack = error_get_stack_trace();
    $l_oServer->fault('Server', "Error Type: {$t_error_type},\nError Description:\n{$t_error_description},\nStack Trace:\n{$t_error_stack}");
    $l_oServer->send_response();
    exit;
}
/**
 * Default error handler
 *
 * This handler will not receive E_ERROR, E_PARSE, E_CORE_*, or E_COMPILE_*
 *  errors.
 *
 * E_USER_* are triggered by us and will contain an error constant in $p_error
 * The others, being system errors, will come with a string in $p_error
 *
 * @access private
 * @param int p_type contains the level of the error raised, as an integer.
 * @param string p_error contains the error message, as a string.
 * @param string p_file contains the filename that the error was raised in, as a string.
 * @param int p_line contains the line number the error was raised at, as an integer.
 * @param array p_context to the active symbol table at the point the error occurred (optional)
 * @uses lang_api.php
 * @uses config_api.php
 * @uses compress_api.php
 * @uses database_api.php (optional)
 * @uses html_api.php (optional)
 */
function error_handler($p_type, $p_error, $p_file, $p_line, $p_context)
{
    global $g_error_parameters, $g_error_handled, $g_error_proceed_url;
    global $g_lang_overrides;
    global $g_error_send_page_header;
    # check if errors were disabled with @ somewhere in this call chain
    if (0 == error_reporting()) {
        return;
    }
    $t_lang_pushed = false;
    $t_db_connected = false;
    if (function_exists('db_is_connected')) {
        if (db_is_connected()) {
            $t_db_connected = true;
        }
    }
    $t_html_api = false;
    if (function_exists('html_end')) {
        $t_html_api = true;
    }
    # flush any language overrides to return to user's natural default
    if ($t_db_connected) {
        lang_push(lang_get_default());
        $t_lang_pushed = true;
    }
    $t_short_file = basename($p_file);
    $t_method_array = config_get_global('display_errors');
    if (isset($t_method_array[$p_type])) {
        $t_method = $t_method_array[$p_type];
    } else {
        if (isset($t_method_array[E_ALL])) {
            $t_method = $t_method_array[E_ALL];
        } else {
            $t_method = 'none';
        }
    }
    # build an appropriate error string
    switch ($p_type) {
        case E_WARNING:
            $t_error_type = 'SYSTEM WARNING';
            $t_error_description = "'{$p_error}' in '{$p_file}' line {$p_line}";
            break;
        case E_NOTICE:
            $t_error_type = 'SYSTEM NOTICE';
            $t_error_description = "'{$p_error}' in '{$p_file}' line {$p_line}";
            break;
        case E_USER_ERROR:
            $t_error_type = "APPLICATION ERROR #{$p_error}";
            $t_error_description = error_string($p_error);
            break;
        case E_USER_WARNING:
            $t_error_type = "APPLICATION WARNING #{$p_error}";
            $t_error_description = error_string($p_error);
            break;
        case E_USER_NOTICE:
            # used for debugging
            $t_error_type = 'DEBUG';
            $t_error_description = $p_error;
            break;
        default:
            # shouldn't happen, just display the error just in case
            $t_error_type = '';
            $t_error_description = $p_error;
    }
    $t_error_description = nl2br($t_error_description);
    switch ($t_method) {
        case 'halt':
            # disable any further event callbacks
            if (function_exists('event_clear_callbacks')) {
                event_clear_callbacks();
            }
            $t_oblen = ob_get_length();
            if (error_handled() && $t_oblen > 0) {
                $t_old_contents = ob_get_contents();
            }
            # We need to ensure compression is off - otherwise the compression headers are output.
            compress_disable();
            # then clean the buffer, leaving output buffering on.
            if ($t_oblen > 0) {
                ob_clean();
            }
            # don't send the page header information if it has already been sent
            if ($g_error_send_page_header) {
                if ($t_html_api) {
                    html_page_top1();
                    if ($p_error != ERROR_DB_QUERY_FAILED && $t_db_connected == true) {
                        html_page_top2();
                    } else {
                        html_page_top2a();
                    }
                } else {
                    echo '<html><head><title>', $t_error_type, '</title></head><body>';
                }
            }
            echo '<br /><div align="center"><table class="width50" cellspacing="1">';
            echo '<tr><td class="form-title">', $t_error_type, '</td></tr>';
            echo '<tr><td><p class="center" style="color:red">', $t_error_description, '</p></td></tr>';
            echo '<tr><td><p class="center">';
            if (null === $g_error_proceed_url) {
                echo lang_get('error_no_proceed');
            } else {
                echo '<a href="', $g_error_proceed_url, '">', lang_get('proceed'), '</a>';
            }
            echo '</p></td></tr>';
            if (ON == config_get_global('show_detailed_errors')) {
                echo '<tr><td>';
                error_print_details($p_file, $p_line, $p_context);
                echo '</td></tr>';
                echo '<tr><td>';
                error_print_stack_trace();
                echo '</td></tr>';
            }
            echo '</table></div>';
            if (isset($t_old_contents)) {
                echo '<p>Previous non-fatal errors occurred.  Page contents follow.</p>';
                echo '<div style="border: solid 1px black;padding: 4px">';
                echo $t_old_contents;
                echo '</div>';
            }
            if ($t_html_api) {
                if ($p_error != ERROR_DB_QUERY_FAILED && $t_db_connected == true) {
                    html_page_bottom();
                } else {
                    html_body_end();
                    html_end();
                }
            } else {
                echo '</body></html>', "\n";
            }
            exit;
        case 'inline':
            echo '<p style="color:red">', $t_error_type, ': ', $t_error_description, '</p>';
            $g_error_handled = true;
            break;
        default:
            # do nothing - note we treat this as we've not handled an error, so any redirects go through.
    }
    if ($t_lang_pushed) {
        lang_pop();
    }
    $g_error_parameters = array();
    $g_error_proceed_url = null;
}
示例#13
0
function mc_error_handler($p_type, $p_error, $p_file, $p_line, $p_context)
{
    global $l_oServer;
    # check if errors were disabled with @ somewhere in this call chain
    # also suppress php 5 strict warnings
    if (0 == error_reporting() || 2048 == $p_type) {
        return;
    }
    # flush any language overrides to return to user's natural default
    if (function_exists('db_is_connected')) {
        if (db_is_connected()) {
            lang_push(lang_get_default());
        }
    }
    # build an appropriate error string
    switch ($p_type) {
        case E_WARNING:
            $t_error_type = 'SYSTEM WARNING';
            $t_error_description = $p_error;
            break;
        case E_NOTICE:
            $t_error_type = 'SYSTEM NOTICE';
            $t_error_description = $p_error;
            break;
        case E_USER_ERROR:
            $t_error_type = "APPLICATION ERROR #{$p_error}";
            $t_error_description = error_string($p_error);
            break;
        case E_USER_WARNING:
            $t_error_type = "APPLICATION WARNING #{$p_error}";
            $t_error_description = error_string($p_error);
            break;
        case E_USER_NOTICE:
            # used for debugging
            $t_error_type = 'DEBUG';
            $t_error_description = $p_error;
            break;
        default:
            #shouldn't happen, just display the error just in case
            $t_error_type = '';
            $t_error_description = $p_error;
    }
    $t_error_stack = error_get_stack_trace();
    error_log("[mantisconnect.php] Error Type: {$t_error_type},\nError Description: {$t_error_description}\nStack Trace:\n{$t_error_stack}");
    $l_oServer->fault('Server', "Error Type: {$t_error_type},\nError Description: {$t_error_description}");
    $l_oServer->send_response();
    exit;
}
示例#14
0
function print_sql_error($p_query)
{
    global $g_administrator_email;
    print error_string(ERROR_SQL);
    print_email_link($g_administrator_email, lang_get('administrator'));
    print "<br />{$p_query};<br />";
}
示例#15
0
/**
 * Default error handler
 *
 * This handler will not receive E_ERROR, E_PARSE, E_CORE_*, or E_COMPILE_* errors.
 *
 * E_USER_* are triggered by us and will contain an error constant in $p_error
 * The others, being system errors, will come with a string in $p_error
 * @param integer $p_type    Contains the level of the error raised, as an integer.
 * @param string  $p_error   Contains the error message, as a string.
 * @param string  $p_file    Contains the filename that the error was raised in, as a string.
 * @param integer $p_line    Contains the line number the error was raised at, as an integer.
 * @param array   $p_context To the active symbol table at the point the error occurred (optional).
 * @return void
 */
function mc_error_handler($p_type, $p_error, $p_file, $p_line, array $p_context)
{
    # check if errors were disabled with @ somewhere in this call chain
    # also suppress php 5 strict warnings
    if (0 == error_reporting() || 2048 == $p_type) {
        return;
    }
    # flush any language overrides to return to user's natural default
    if (function_exists('db_is_connected')) {
        if (db_is_connected()) {
            lang_push(lang_get_default());
        }
    }
    # build an appropriate error string
    switch ($p_type) {
        case E_WARNING:
            $t_error_type = 'SYSTEM WARNING';
            $t_error_description = $p_error;
            break;
        case E_NOTICE:
            $t_error_type = 'SYSTEM NOTICE';
            $t_error_description = $p_error;
            break;
        case E_USER_ERROR:
            $t_error_type = 'APPLICATION ERROR #' . $p_error;
            $t_error_description = error_string($p_error);
            break;
        case E_USER_WARNING:
            $t_error_type = 'APPLICATION WARNING #' . $p_error;
            $t_error_description = error_string($p_error);
            break;
        case E_USER_NOTICE:
            # used for debugging
            $t_error_type = 'DEBUG';
            $t_error_description = $p_error;
            break;
        default:
            #shouldn't happen, just display the error just in case
            $t_error_type = '';
            $t_error_description = $p_error;
    }
    $t_error_stack = error_get_stack_trace();
    error_log('[mantisconnect.php] Error Type: ' . $t_error_type . ',' . "\n" . 'Error Description: ' . $t_error_description . "\n" . 'Stack Trace:' . "\n" . $t_error_stack);
    throw new SoapFault('Server', 'Error Type: ' . $t_error_type . ',' . "\n" . 'Error Description: ' . $t_error_description);
}
# get user id
$t_user_id = $f_user_id;

$c_export = implode('',$t_prefs_arr);

# update preferences
$t_user_print_pref_table = db_get_table( 'user_print_pref' );
$query = "UPDATE $t_user_print_pref_table
		SET print_pref=" . db_param() . "
		WHERE user_id=" . db_param();

$result = db_query_bound( $query, Array( $c_export, $t_user_id ) );

form_security_purge( 'print_all_bug_options_update' );

html_page_top( null, $f_redirect_url );

echo '<br /><div>';

if ( $result ) {
	print lang_get( 'operation_successful' );
} else {
	print error_string( ERROR_GENERIC );
}

echo '<br />';
print_bracket_link( $f_redirect_url, lang_get( 'proceed' ) );
echo '<br /></div>';
html_page_bottom();
# get the fields list
$t_field_name_arr = get_field_names();
$field_name_count = count($t_field_name_arr);
# check the checkboxes
for ($i = 0; $i < $field_name_count; $i++) {
    $t_name = 'print_' . utf8_strtolower(str_replace(' ', '_', $t_field_name_arr[$i]));
    $t_flag = gpc_get($t_name, null);
    if ($t_flag === null) {
        $t_prefs_arr[$i] = 0;
    } else {
        $t_prefs_arr[$i] = 1;
    }
}
# get user id
$t_user_id = $f_user_id;
$c_export = implode('', $t_prefs_arr);
# update preferences
$t_user_print_pref_table = db_get_table('user_print_pref');
$query = "UPDATE {$t_user_print_pref_table}\n\t\tSET print_pref=" . db_param() . "\n\t\tWHERE user_id=" . db_param();
$result = db_query_bound($query, array($c_export, $t_user_id));
form_security_purge('print_all_bug_options_update');
html_page_top(null, $f_redirect_url);
if ($result) {
    html_operation_successful($f_redirect_url);
} else {
    echo '<div class="failure-msg">';
    print error_string(ERROR_GENERIC) . '<br />';
    print_bracket_link($f_redirect_url, lang_get('proceed'));
    echo '</div>';
}
html_page_bottom();
示例#18
0
function print_sql_error($p_query)
{
    global $g_administrator_email;
    $error = error_string(ERROR_SQL);
    $error .= lang_get('word_separator');
    $error .= sprintf(lang_get('please_report'), prepare_email_link($g_administrator_email, lang_get('administrator')));
    $error .= "<br />{$p_query};<br />";
    echo $error;
}
示例#19
0
<?php

$GLOBALS['t_dir_emailreporting_adjust'] = dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR;
require_once $GLOBALS['t_dir_emailreporting_adjust'] . 'core.php';
$t_basename = 'EmailReporting';
$t_pagename = 'bug_report_mail';
if (plugin_needs_upgrade($g_plugin_cache[$t_basename])) {
    error_parameters($t_basename);
    echo error_string(ERROR_PLUGIN_UPGRADE_NEEDED);
    exit;
}
// This would work but skips some important checks done in plugin.php.
// For the moment this code will be disabled
/*
$t_pagename = 'pages/bug_report_mail.php';
plugin_push_current( $t_basename );
plugin_require_api( $t_pagename );
*/
$t_tmp_plugin_page = plugin_page($t_pagename, TRUE, $t_basename);
$t_tmp_plugin_page = explode('?', $t_tmp_plugin_page, 2);
$t_tmp_plugin_page[1] = explode('=', $t_tmp_plugin_page[1], 2);
$_GET[$t_tmp_plugin_page[1][0]] = $t_tmp_plugin_page[1][1];
require_once $GLOBALS['t_dir_emailreporting_adjust'] . $t_tmp_plugin_page[0];
示例#20
0
function error_handler($p_type, $p_error, $p_file, $p_line, $p_context)
{
    global $g_error_parameters, $g_error_handled, $g_error_proceed_url;
    global $g_lang_overrides;
    global $g_error_send_page_header;
    # check if errors were disabled with @ somewhere in this call chain
    # also suppress php 5 strict warnings
    if (0 == error_reporting() || 2048 == $p_type) {
        return;
    }
    $t_lang_pushed = false;
    # flush any language overrides to return to user's natural default
    if (function_exists('db_is_connected')) {
        if (db_is_connected()) {
            lang_push(lang_get_default());
            $t_lang_pushed = true;
        }
    }
    $t_short_file = basename($p_file);
    $t_method_array = config_get('display_errors');
    if (isset($t_method_array[$p_type])) {
        $t_method = $t_method_array[$p_type];
    } else {
        $t_method = 'none';
    }
    # build an appropriate error string
    switch ($p_type) {
        case E_WARNING:
            $t_error_type = 'SYSTEM WARNING';
            $t_error_description = $p_error;
            break;
        case E_NOTICE:
            $t_error_type = 'SYSTEM NOTICE';
            $t_error_description = $p_error;
            break;
        case E_USER_ERROR:
            $t_error_type = "APPLICATION ERROR #{$p_error}";
            $t_error_description = error_string($p_error);
            break;
        case E_USER_WARNING:
            $t_error_type = "APPLICATION WARNING #{$p_error}";
            $t_error_description = error_string($p_error);
            break;
        case E_USER_NOTICE:
            # used for debugging
            $t_error_type = 'DEBUG';
            $t_error_description = $p_error;
            break;
        default:
            #shouldn't happen, just display the error just in case
            $t_error_type = '';
            $t_error_description = $p_error;
    }
    $t_error_description = nl2br($t_error_description);
    if ('halt' == $t_method) {
        $t_old_contents = ob_get_contents();
        # ob_end_clean() still seems to call the output handler which
        #  outputs the headers indicating compression. If we had
        #  PHP > 4.2.0 we could use ob_clean() instead but as it is
        #  we need to disable compression.
        compress_disable();
        if (ob_get_length()) {
            ob_end_clean();
        }
        # don't send the page header information if it has already been sent
        if ($g_error_send_page_header) {
            html_page_top1();
            if ($p_error != ERROR_DB_QUERY_FAILED) {
                html_page_top2();
            } else {
                html_page_top2a();
            }
        }
        print '<br /><div align="center"><table class="width50" cellspacing="1">';
        print "<tr><td class=\"form-title\">{$t_error_type}</td></tr>";
        print "<tr><td><p class=\"center\" style=\"color:red\">{$t_error_description}</p></td></tr>";
        print '<tr><td><p class="center">';
        if (null === $g_error_proceed_url) {
            print lang_get('error_no_proceed');
        } else {
            print "<a href=\"{$g_error_proceed_url}\">" . lang_get('proceed') . '</a>';
        }
        print '</p></td></tr>';
        if (ON == config_get('show_detailed_errors')) {
            print '<tr><td>';
            error_print_details($p_file, $p_line, $p_context);
            print '</td></tr>';
            print '<tr><td>';
            error_print_stack_trace();
            print '</td></tr>';
        }
        print '</table></div>';
        if ($g_error_handled && !is_blank($t_old_contents)) {
            print '<p>Previous non-fatal errors occurred.  Page contents follow.</p>';
            print '<div style="border: solid 1px black;padding: 4px">';
            print $t_old_contents;
            print '</div>';
        }
        if ($p_error != ERROR_DB_QUERY_FAILED) {
            html_page_bottom1();
        } else {
            html_body_end();
            html_end();
        }
        exit;
    } else {
        if ('inline' == $t_method) {
            print "<p style=\"color:red\">{$t_error_type}: {$t_error_description}</p>";
        } else {
            # do nothing
        }
    }
    if ($t_lang_pushed) {
        lang_pop();
    }
    $g_error_parameters = array();
    $g_error_handled = true;
    $g_error_proceed_url = null;
}
/**
 * Schema update to install and configure new Gravatar plugin.
 * If the instance has enabled use of avatars, then we register the plugin
 * @return int 2 if successful
 */
function install_gravatar_plugin()
{
    if (config_get_global('show_avatar')) {
        $t_avatar_plugin = 'Gravatar';
        # Register and install the plugin
        $t_plugin = plugin_register($t_avatar_plugin, true);
        if (!is_null($t_plugin)) {
            plugin_install($t_plugin);
        } else {
            error_parameters($t_avatar_plugin);
            echo '<br>' . error_string(ERROR_PLUGIN_INSTALL_FAILED);
            return 1;
        }
    }
    # Return 2 because that's what ADOdb/DataDict does when things happen properly
    return 2;
}