Logging.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * Logging functionality for webserver.
  5. *
  6. * This includes web server specific code to log some information.
  7. *
  8. * @package PhpMyAdmin
  9. */
  10. declare(strict_types=1);
  11. namespace PhpMyAdmin;
  12. use PhpMyAdmin\Core;
  13. /**
  14. * Misc logging functions
  15. *
  16. * @package PhpMyAdmin
  17. */
  18. class Logging
  19. {
  20. /**
  21. * Get authentication logging destination
  22. *
  23. * @return string
  24. */
  25. public static function getLogDestination()
  26. {
  27. $log_file = $GLOBALS['PMA_Config']->get('AuthLog');
  28. /* Autodetect */
  29. if ($log_file == 'auto') {
  30. if (function_exists('syslog')) {
  31. $log_file = 'syslog';
  32. } elseif (function_exists('error_log')) {
  33. $log_file = 'php';
  34. } else {
  35. $log_file = '';
  36. }
  37. }
  38. return $log_file;
  39. }
  40. /**
  41. * Generate log message for authentication logging
  42. *
  43. * @param string $user user name
  44. * @param string $status status message
  45. *
  46. * @return string
  47. */
  48. public static function getLogMessage($user, $status)
  49. {
  50. if ($status == 'ok') {
  51. return 'user authenticated: ' . $user . ' from ' . Core::getIp();
  52. }
  53. return 'user denied: ' . $user . ' (' . $status . ') from ' . Core::getIp();
  54. }
  55. /**
  56. * Logs user information to webserver logs.
  57. *
  58. * @param string $user user name
  59. * @param string $status status message
  60. *
  61. * @return void
  62. */
  63. public static function logUser($user, $status = 'ok')
  64. {
  65. if (function_exists('apache_note')) {
  66. apache_note('userID', $user);
  67. apache_note('userStatus', $status);
  68. }
  69. /* Do not log successful authentications */
  70. if (! $GLOBALS['PMA_Config']->get('AuthLogSuccess') && $status == 'ok') {
  71. return;
  72. }
  73. $log_file = self::getLogDestination();
  74. if (empty($log_file)) {
  75. return;
  76. }
  77. $message = self::getLogMessage($user, $status);
  78. if ($log_file == 'syslog') {
  79. if (function_exists('syslog')) {
  80. @openlog('phpMyAdmin', LOG_NDELAY | LOG_PID, LOG_AUTHPRIV);
  81. @syslog(LOG_WARNING, $message);
  82. closelog();
  83. }
  84. } elseif ($log_file == 'php') {
  85. @error_log($message);
  86. } elseif ($log_file == 'sapi') {
  87. @error_log($message, 4);
  88. } else {
  89. @error_log(
  90. date('M d H:i:s') . ' phpmyadmin: ' . $message . "\n",
  91. 3,
  92. $log_file
  93. );
  94. }
  95. }
  96. }