From 79f6773ef970aa3d3f2454ec088d4e9d348d40f0 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 29 Jun 2017 11:43:32 +0200 Subject: [PATCH] Don't log passwords on dav exceptions Signed-off-by: Joas Schilling --- .../Connector/Sabre/ExceptionLoggerPlugin.php | 25 +++---------------- .../Sabre/ExceptionLoggerPluginTest.php | 6 ++--- lib/private/Log.php | 15 +++++++---- 3 files changed, 17 insertions(+), 29 deletions(-) diff --git a/apps/dav/lib/Connector/Sabre/ExceptionLoggerPlugin.php b/apps/dav/lib/Connector/Sabre/ExceptionLoggerPlugin.php index 4f7c2286827..dce2f9c45e4 100644 --- a/apps/dav/lib/Connector/Sabre/ExceptionLoggerPlugin.php +++ b/apps/dav/lib/Connector/Sabre/ExceptionLoggerPlugin.php @@ -94,26 +94,9 @@ class ExceptionLoggerPlugin extends \Sabre\DAV\ServerPlugin { $level = \OCP\Util::DEBUG; } - $message = $ex->getMessage(); - if ($ex instanceof Exception) { - if (empty($message)) { - $response = new Response($ex->getHTTPCode()); - $message = $response->getStatusText(); - } - $message = "HTTP/1.1 {$ex->getHTTPCode()} $message"; - } - - $user = \OC_User::getUser(); - - $exception = [ - 'Message' => $message, - 'Exception' => $exceptionClass, - 'Code' => $ex->getCode(), - 'Trace' => $ex->getTraceAsString(), - 'File' => $ex->getFile(), - 'Line' => $ex->getLine(), - 'User' => $user, - ]; - $this->logger->log($level, 'Exception: ' . json_encode($exception), ['app' => $this->appName]); + $this->logger->logException($ex, [ + 'app' => $this->appName, + 'level' => $level, + ]); } } diff --git a/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php index 8088ee6dc4d..85ede2ad681 100644 --- a/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php @@ -71,13 +71,13 @@ class ExceptionLoggerPluginTest extends TestCase { $this->plugin->logException($exception); $this->assertEquals($expectedLogLevel, $this->logger->level); - $this->assertStringStartsWith('Exception: {"Message":"' . $expectedMessage, $this->logger->message); + $this->assertStringStartsWith('Exception: {"Exception":' . json_encode(get_class($exception)) . ',"Message":"' . $expectedMessage . '",', $this->logger->message); } public function providesExceptions() { return [ - [0, 'HTTP\/1.1 404 Not Found', new NotFound()], - [4, 'HTTP\/1.1 400 This path leads to nowhere', new InvalidPath('This path leads to nowhere')] + [0, '', new NotFound()], + [4, 'This path leads to nowhere', new InvalidPath('This path leads to nowhere')] ]; } diff --git a/lib/private/Log.php b/lib/private/Log.php index ea20353a0a0..0d291218096 100644 --- a/lib/private/Log.php +++ b/lib/private/Log.php @@ -305,13 +305,18 @@ class Log implements ILogger { /** * Logs an exception very detailed * - * @param \Exception | \Throwable $exception + * @param \Exception|\Throwable $exception * @param array $context * @return void * @since 8.2.0 */ public function logException($exception, array $context = array()) { - $exception = array( + $level = Util::ERROR; + if (isset($context['level'])) { + $level = $context['level']; + unset($context['level']); + } + $data = array( 'Exception' => get_class($exception), 'Message' => $exception->getMessage(), 'Code' => $exception->getCode(), @@ -319,10 +324,10 @@ class Log implements ILogger { 'File' => $exception->getFile(), 'Line' => $exception->getLine(), ); - $exception['Trace'] = preg_replace('!(' . implode('|', $this->methodsWithSensitiveParameters) . ')\(.*\)!', '$1(*** sensitive parameters replaced ***)', $exception['Trace']); + $data['Trace'] = preg_replace('!(' . implode('|', $this->methodsWithSensitiveParameters) . ')\(.*\)!', '$1(*** sensitive parameters replaced ***)', $data['Trace']); $msg = isset($context['message']) ? $context['message'] : 'Exception'; - $msg .= ': ' . json_encode($exception); - $this->error($msg, $context); + $msg .= ': ' . json_encode($data); + $this->log($level, $msg, $context); } /** -- 2.39.5