You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.7 KiB
112 lines
2.7 KiB
2 years ago
|
<?php
|
||
|
/**
|
||
|
* Logging functionality for webserver.
|
||
|
*
|
||
|
* This includes web server specific code to log some information.
|
||
|
*/
|
||
|
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
namespace PhpMyAdmin;
|
||
|
|
||
|
use function closelog;
|
||
|
use function date;
|
||
|
use function error_log;
|
||
|
use function function_exists;
|
||
|
use function openlog;
|
||
|
use function syslog;
|
||
|
|
||
|
use const LOG_AUTHPRIV;
|
||
|
use const LOG_NDELAY;
|
||
|
use const LOG_PID;
|
||
|
use const LOG_WARNING;
|
||
|
|
||
|
/**
|
||
|
* Misc logging functions
|
||
|
*/
|
||
|
class Logging
|
||
|
{
|
||
|
/**
|
||
|
* Get authentication logging destination
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public static function getLogDestination()
|
||
|
{
|
||
|
$log_file = $GLOBALS['config']->get('AuthLog');
|
||
|
|
||
|
/* Autodetect */
|
||
|
if ($log_file === 'auto') {
|
||
|
if (function_exists('syslog')) {
|
||
|
$log_file = 'syslog';
|
||
|
} elseif (function_exists('error_log')) {
|
||
|
$log_file = 'php';
|
||
|
} else {
|
||
|
$log_file = '';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $log_file;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Generate log message for authentication logging
|
||
|
*
|
||
|
* @param string $user user name
|
||
|
* @param string $status status message
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public static function getLogMessage($user, $status)
|
||
|
{
|
||
|
if ($status === 'ok') {
|
||
|
return 'user authenticated: ' . $user . ' from ' . Core::getIp();
|
||
|
}
|
||
|
|
||
|
return 'user denied: ' . $user . ' (' . $status . ') from ' . Core::getIp();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Logs user information to webserver logs.
|
||
|
*
|
||
|
* @param string $user user name
|
||
|
* @param string $status status message
|
||
|
*/
|
||
|
public static function logUser($user, $status = 'ok'): void
|
||
|
{
|
||
|
if (function_exists('apache_note')) {
|
||
|
apache_note('userID', $user);
|
||
|
apache_note('userStatus', $status);
|
||
|
}
|
||
|
|
||
|
/* Do not log successful authentications */
|
||
|
if (! $GLOBALS['config']->get('AuthLogSuccess') && $status === 'ok') {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$log_file = self::getLogDestination();
|
||
|
if (empty($log_file)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$message = self::getLogMessage($user, $status);
|
||
|
if ($log_file === 'syslog') {
|
||
|
if (function_exists('syslog')) {
|
||
|
@openlog('phpMyAdmin', LOG_NDELAY | LOG_PID, LOG_AUTHPRIV);
|
||
|
@syslog(LOG_WARNING, $message);
|
||
|
closelog();
|
||
|
}
|
||
|
} elseif ($log_file === 'php') {
|
||
|
@error_log($message);
|
||
|
} elseif ($log_file === 'sapi') {
|
||
|
@error_log($message, 4);
|
||
|
} else {
|
||
|
@error_log(
|
||
|
date('M d H:i:s') . ' phpmyadmin: ' . $message . "\n",
|
||
|
3,
|
||
|
$log_file
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|