Thomas Bruederli
2014-08-18 3ebac0167bf20104fb7a2a55934765117760264c
program/lib/Roundcube/rcube.php
@@ -172,9 +172,13 @@
    public function get_dbh()
    {
        if (!$this->db) {
            $config_all = $this->config->all();
            $this->db = rcube_db::factory($config_all['db_dsnw'], $config_all['db_dsnr'], $config_all['db_persistent']);
            $this->db->set_debug((bool)$config_all['sql_debug']);
            $this->db = rcube_db::factory(
                $this->config->get('db_dsnw'),
                $this->config->get('db_dsnr'),
                $this->config->get('db_persistent')
            );
            $this->db->set_debug((bool)$this->config->get('sql_debug'));
        }
        return $this->db;
@@ -385,8 +389,12 @@
        $this->storage->set_options($options);
        $this->set_storage_prop();
    }
        // subscribe to 'storage_connected' hook for session logging
        if ($this->config->get('imap_log_session', false)) {
            $this->plugins->register_hook('storage_connected', array($this, 'storage_log_session'));
        }
    }
    /**
     * Set storage parameters.
@@ -452,6 +460,16 @@
        }
    }
    /**
     * Callback for IMAP connection events to log session identifiers
     */
    public function storage_log_session($args)
    {
        if (!empty($args['session']) && session_id()) {
            $this->write_log('imap_session', $args['session']);
        }
    }
    /**
     * Create session object and start the session.
@@ -825,7 +843,13 @@
         */
        $clear = pack("a*H2", $clear, "80");
        if (function_exists('mcrypt_module_open') &&
        if (function_exists('openssl_encrypt')) {
            $method = 'DES-EDE3-CBC';
            $opts   = defined('OPENSSL_RAW_DATA') ? OPENSSL_RAW_DATA : true;
            $iv     = $this->create_iv(openssl_cipher_iv_length($method));
            $cipher = $iv . openssl_encrypt($clear, $method, $ckey, $opts, $iv);
        }
        else if (function_exists('mcrypt_module_open') &&
            ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_CBC, ""))
        ) {
            $iv = $this->create_iv(mcrypt_enc_get_iv_size($td));
@@ -846,7 +870,7 @@
                self::raise_error(array(
                    'code' => 500, 'type' => 'php',
                    'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Could not perform encryption; make sure Mcrypt is installed or lib/des.inc is available"
                    'message' => "Could not perform encryption; make sure OpenSSL or Mcrypt or lib/des.inc is available"
                    ), true, true);
            }
        }
@@ -872,7 +896,21 @@
        $cipher = $base64 ? base64_decode($cipher) : $cipher;
        if (function_exists('mcrypt_module_open') &&
        if (function_exists('openssl_decrypt')) {
            $method  = 'DES-EDE3-CBC';
            $opts    = defined('OPENSSL_RAW_DATA') ? OPENSSL_RAW_DATA : true;
            $iv_size = openssl_cipher_iv_length($method);
            $iv      = substr($cipher, 0, $iv_size);
            // session corruption? (#1485970)
            if (strlen($iv) < $iv_size) {
                return '';
            }
            $cipher = substr($cipher, $iv_size);
            $clear  = openssl_decrypt($cipher, $method, $ckey, $opts, $iv);
        }
        else if (function_exists('mcrypt_module_open') &&
            ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_CBC, ""))
        ) {
            $iv_size = mcrypt_enc_get_iv_size($td);
@@ -1114,8 +1152,12 @@
            $line = var_export($line, true);
        }
        $date_format = self::$instance ? self::$instance->config->get('log_date_format') : null;
        $log_driver  = self::$instance ? self::$instance->config->get('log_driver') : null;
        $date_format = $log_driver = $session_key = null;
        if (self::$instance) {
            $date_format = self::$instance->config->get('log_date_format');
            $log_driver  = self::$instance->config->get('log_driver');
            $session_key = intval(self::$instance->config->get('log_session_id', 8));
        }
        if (empty($date_format)) {
            $date_format = 'd-M-Y H:i:s O';
@@ -1134,8 +1176,8 @@
        }
        // add session ID to the log
        if ($sess = session_id()) {
            $line = '<' . substr($sess, 0, 8) . '> ' . $line;
        if ($session_key > 0 && ($sess = session_id())) {
            $line = '<' . substr($sess, 0, $session_key) . '> ' . $line;
        }
        if ($log_driver == 'syslog') {