| | |
| | | /* |
| | | +-----------------------------------------------------------------------+ |
| | | | This file is part of the Roundcube Webmail client | |
| | | | Copyright (C) 2008-2012, The Roundcube Dev Team | |
| | | | Copyright (C) 2011-2012, Kolab Systems AG | |
| | | | Copyright (C) 2008-2014, The Roundcube Dev Team | |
| | | | Copyright (C) 2011-2014, Kolab Systems AG | |
| | | | | |
| | | | Licensed under the GNU General Public License version 3 or | |
| | | | any later version with exceptions for skins & plugins. | |
| | |
| | | */ |
| | | public $plugins; |
| | | |
| | | /** |
| | | * Instance of rcube_user class. |
| | | * |
| | | * @var rcube_user |
| | | */ |
| | | public $user; |
| | | |
| | | |
| | | /* private/protected vars */ |
| | | protected $texts; |
| | |
| | | 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; |
| | |
| | | // for backward compat. (deprecated, will be removed) |
| | | $this->imap = $this->storage; |
| | | |
| | | // enable caching of mail data |
| | | $storage_cache = $this->config->get("{$driver}_cache"); |
| | | $messages_cache = $this->config->get('messages_cache'); |
| | | // for backward compatybility |
| | | if ($storage_cache === null && $messages_cache === null && $this->config->get('enable_caching')) { |
| | | $storage_cache = 'db'; |
| | | $messages_cache = true; |
| | | } |
| | | |
| | | if ($storage_cache) { |
| | | $this->storage->set_caching($storage_cache); |
| | | } |
| | | if ($messages_cache) { |
| | | $this->storage->set_messages_caching(true); |
| | | } |
| | | |
| | | // set pagesize from config |
| | | $pagesize = $this->config->get('mail_pagesize'); |
| | | if (!$pagesize) { |
| | | $pagesize = $this->config->get('pagesize', 50); |
| | | } |
| | | $this->storage->set_pagesize($pagesize); |
| | | |
| | | // set class options |
| | | $options = array( |
| | | 'auth_type' => $this->config->get("{$driver}_auth_type", 'check'), |
| | | 'auth_cid' => $this->config->get("{$driver}_auth_cid"), |
| | | 'auth_pw' => $this->config->get("{$driver}_auth_pw"), |
| | | 'debug' => (bool) $this->config->get("{$driver}_debug"), |
| | | 'force_caps' => (bool) $this->config->get("{$driver}_force_caps"), |
| | | 'disabled_caps' => $this->config->get("{$driver}_disabled_caps"), |
| | | 'timeout' => (int) $this->config->get("{$driver}_timeout"), |
| | | 'skip_deleted' => (bool) $this->config->get('skip_deleted'), |
| | | 'driver' => $driver, |
| | | 'auth_type' => $this->config->get("{$driver}_auth_type", 'check'), |
| | | 'auth_cid' => $this->config->get("{$driver}_auth_cid"), |
| | | 'auth_pw' => $this->config->get("{$driver}_auth_pw"), |
| | | 'debug' => (bool) $this->config->get("{$driver}_debug"), |
| | | 'force_caps' => (bool) $this->config->get("{$driver}_force_caps"), |
| | | 'disabled_caps' => $this->config->get("{$driver}_disabled_caps"), |
| | | 'socket_options' => $this->config->get("{$driver}_conn_options"), |
| | | 'timeout' => (int) $this->config->get("{$driver}_timeout"), |
| | | 'skip_deleted' => (bool) $this->config->get('skip_deleted'), |
| | | 'driver' => $driver, |
| | | ); |
| | | |
| | | if (!empty($_SESSION['storage_host'])) { |
| | |
| | | |
| | | /** |
| | | * Set storage parameters. |
| | | * This must be done AFTER connecting to the server! |
| | | */ |
| | | protected function set_storage_prop() |
| | | { |
| | | $storage = $this->get_storage(); |
| | | |
| | | // set pagesize from config |
| | | $pagesize = $this->config->get('mail_pagesize'); |
| | | if (!$pagesize) { |
| | | $pagesize = $this->config->get('pagesize', 50); |
| | | } |
| | | |
| | | $storage->set_pagesize($pagesize); |
| | | $storage->set_charset($this->config->get('default_charset', RCUBE_CHARSET)); |
| | | |
| | | if ($default_folders = $this->config->get('default_folders')) { |
| | | $storage->set_default_folders($default_folders); |
| | | // enable caching of mail data |
| | | $driver = $this->config->get('storage_driver', 'imap'); |
| | | $storage_cache = $this->config->get("{$driver}_cache"); |
| | | $messages_cache = $this->config->get('messages_cache'); |
| | | // for backward compatybility |
| | | if ($storage_cache === null && $messages_cache === null && $this->config->get('enable_caching')) { |
| | | $storage_cache = 'db'; |
| | | $messages_cache = true; |
| | | } |
| | | if (isset($_SESSION['mbox'])) { |
| | | $storage->set_folder($_SESSION['mbox']); |
| | | |
| | | if ($storage_cache) { |
| | | $storage->set_caching($storage_cache); |
| | | } |
| | | if (isset($_SESSION['page'])) { |
| | | $storage->set_page($_SESSION['page']); |
| | | if ($messages_cache) { |
| | | $storage->set_messages_caching(true); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Set special folders type association. |
| | | * This must be done AFTER connecting to the server! |
| | | */ |
| | | protected function set_special_folders() |
| | | { |
| | | $storage = $this->get_storage(); |
| | | $folders = $storage->get_special_folders(true); |
| | | $prefs = array(); |
| | | |
| | | // check SPECIAL-USE flags on IMAP folders |
| | | foreach ($folders as $type => $folder) { |
| | | $idx = $type . '_mbox'; |
| | | if ($folder !== $this->config->get($idx)) { |
| | | $prefs[$idx] = $folder; |
| | | } |
| | | } |
| | | |
| | | // Some special folders differ, update user preferences |
| | | if (!empty($prefs) && $this->user) { |
| | | $this->user->save_prefs($prefs); |
| | | } |
| | | |
| | | // create default folders (on login) |
| | | if ($this->config->get('create_default_folders')) { |
| | | $storage->create_default_folders(); |
| | | } |
| | | } |
| | | |
| | |
| | | */ |
| | | $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)); |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | |
| | | $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); |
| | |
| | | return true; |
| | | } |
| | | |
| | | // add session ID to the log |
| | | if ($sess = session_id()) { |
| | | $line = '<' . substr($sess, 0, 8) . '> ' . $line; |
| | | } |
| | | |
| | | if ($log_driver == 'syslog') { |
| | | $prio = $name == 'errors' ? LOG_ERR : LOG_INFO; |
| | | syslog($prio, $line); |
| | |
| | | } |
| | | |
| | | // installer |
| | | if (class_exists('rcube_install', false)) { |
| | | $rci = rcube_install::get_instance(); |
| | | if (class_exists('rcmail_install', false)) { |
| | | $rci = rcmail_install::get_instance(); |
| | | $rci->raise_error($arg); |
| | | return; |
| | | } |
| | |
| | | self::write_log($dest, sprintf("%s: %0.4f sec", $label, $diff)); |
| | | } |
| | | |
| | | /** |
| | | * Setter for system user object |
| | | * |
| | | * @param rcube_user Current user instance |
| | | */ |
| | | public function set_user($user) |
| | | { |
| | | if (is_object($user)) { |
| | | $this->user = $user; |
| | | |
| | | // overwrite config with user preferences |
| | | $this->config->set_user_prefs((array)$this->user->get_prefs()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Getter for logged user ID. |
| | |
| | | )); |
| | | |
| | | if ($plugin['abort']) { |
| | | if (!empty($plugin['error'])) { |
| | | $error = $plugin['error']; |
| | | } |
| | | if (!empty($plugin['body_file'])) { |
| | | $body_file = $plugin['body_file']; |
| | | } |
| | | |
| | | return isset($plugin['result']) ? $plugin['result'] : false; |
| | | } |
| | | |