From 3786a48aeb27b0ee54694103e0c19808a62ff5e0 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Thu, 16 Jan 2014 03:02:02 -0500
Subject: [PATCH] * New option that write logs to per-user directories. (Debug) logs will only be written if a directory for the current user exists. * The 'write_log' plugin hook now also supports the return property 'dir' to let plugins specify the log directory.

---
 program/lib/Roundcube/rcube.php |   26 +++++++++++++++++++++++++-
 config/defaults.inc.php         |    4 ++++
 2 files changed, 29 insertions(+), 1 deletions(-)

diff --git a/config/defaults.inc.php b/config/defaults.inc.php
index b4c0206..b1e3bc8 100644
--- a/config/defaults.inc.php
+++ b/config/defaults.inc.php
@@ -73,6 +73,10 @@
 // For possible values see installer or http://php.net/manual/en/function.openlog.php
 $config['syslog_facility'] = LOG_USER;
 
+// Activate this option if logs should be written to per-user directories.
+// Data will only be logged if a directry <log_dir>/<username>/ exists and is writable.
+$config['per_user_logging'] = false;
+
 // Log sent messages to <log_dir>/sendmail or to syslog
 $config['smtp_log'] = true;
 
diff --git a/program/lib/Roundcube/rcube.php b/program/lib/Roundcube/rcube.php
index 503e29d..d58eb08 100644
--- a/program/lib/Roundcube/rcube.php
+++ b/program/lib/Roundcube/rcube.php
@@ -1114,7 +1114,20 @@
         // log_driver == 'file' is assumed here
 
         $line = sprintf("[%s]: %s\n", $date, $line);
-        $log_dir  = self::$instance ? self::$instance->config->get('log_dir') : null;
+        $log_dir = null;
+
+        // per-user logging is activated
+        if (self::$instance && self::$instance->config->get('per_user_logging', false) && self::$instance->get_user_id()) {
+            $log_dir = self::$instance->get_user_log_dir();
+            if (empty($log_dir))
+                return false;
+        }
+        else if (!empty($log['dir'])) {
+            $log_dir = $log['dir'];
+        }
+        else if (self::$instance) {
+            $log_dir = self::$instance->config->get('log_dir');
+        }
 
         if (empty($log_dir)) {
             $log_dir = RCUBE_INSTALL_PATH . 'logs';
@@ -1352,6 +1365,17 @@
         }
     }
 
+    /**
+     * Get the per-user log directory
+     */
+    protected function get_user_log_dir()
+    {
+        $log_dir = $this->config->get('log_dir', RCUBE_INSTALL_PATH . 'logs');
+        $user_name = $this->get_user_name();
+        $user_log_dir = $log_dir . '/' . $user_name;
+
+        return !empty($user_name) && is_writable($user_log_dir) ? $user_log_dir : false;
+    }
 
     /**
      * Getter for logged user language code.

--
Gitblit v1.9.1