From bec31a4e86ac0d6b569e7b9601b0bde4a0e26a16 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Thu, 06 May 2010 13:51:31 -0400
Subject: [PATCH] - fix for use without session object
---
program/include/rcmail.php | 120 +++++++++++++++++++++++++++++++++--------------------------
1 files changed, 67 insertions(+), 53 deletions(-)
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 1224822..d9ee00a 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -107,7 +107,7 @@
$this->action = asciiwords(get_input_value('_action', RCUBE_INPUT_GPC));
// reset some session parameters when changing task
- if ($_SESSION['task'] != $this->task)
+ if ($this->session && $_SESSION['task'] != $this->task)
$this->session->remove('page');
// set current task to session
@@ -292,22 +292,24 @@
public function get_address_sources($writeable = false)
{
$abook_type = strtolower($this->config->get('address_book_type'));
- $ldap_config = (array)$this->config->get('ldap_public');
- $autocomplete = (array)$this->config->get('autocomplete_addressbooks');
+ $ldap_config = $this->config->get('ldap_public');
+ $autocomplete = (array) $this->config->get('autocomplete_addressbooks');
$list = array();
// We are using the DB address book
if ($abook_type != 'ldap') {
+ $contacts = new rcube_contacts($this->db, null);
$list['0'] = array(
'id' => 0,
'name' => rcube_label('personaladrbook'),
- 'groups' => true,
+ 'groups' => $contacts->groups,
'readonly' => false,
'autocomplete' => in_array('sql', $autocomplete)
);
}
- if (is_array($ldap_config)) {
+ if ($ldap_config) {
+ $ldap_config = (array) $ldap_config;
foreach ($ldap_config as $id => $prop)
$list[$id] = array(
'id' => $id,
@@ -324,11 +326,11 @@
if ($writeable && !empty($list)) {
foreach ($list as $idx => $item) {
if ($item['readonly']) {
- unset($list[$idx]);
+ unset($list[$idx]);
}
}
}
-
+
return $list;
}
@@ -348,7 +350,7 @@
$this->output = new rcube_template($this->task, $framed);
// set keep-alive/check-recent interval
- if ($keep_alive = $this->session->get_keep_alive()) {
+ if ($this->session && ($keep_alive = $this->session->get_keep_alive())) {
$this->output->set_env('keep_alive', $keep_alive);
}
@@ -421,8 +423,8 @@
// set pagesize from config
$this->imap->set_pagesize($this->config->get('pagesize', 50));
- // Setting root and delimiter before iil_Connect can save time detecting them
- // using NAMESPACE and LIST
+ // Setting root and delimiter before establishing the connection
+ // can save time detecting them using NAMESPACE and LIST
$options = array(
'auth_method' => $this->config->get('imap_auth_type', 'check'),
'delimiter' => isset($_SESSION['imap_delimiter']) ? $_SESSION['imap_delimiter'] : $this->config->get('imap_delimiter'),
@@ -456,21 +458,21 @@
*/
public function imap_connect()
{
- $conn = false;
-
if (!$this->imap)
$this->imap_init();
- if ($_SESSION['imap_host'] && !$this->imap->conn) {
- if (!($conn = $this->imap->connect($_SESSION['imap_host'], $_SESSION['username'], $this->decrypt($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl']))) {
+ if ($_SESSION['imap_host'] && !$this->imap->conn->connected()) {
+ if (!$this->imap->connect($_SESSION['imap_host'], $_SESSION['username'], $this->decrypt($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl'])) {
if ($this->output)
$this->output->show_message($this->imap->error_code == -1 ? 'imaperror' : 'sessionerror', 'error');
}
-
- $this->set_imap_prop();
+ else {
+ $this->set_imap_prop();
+ return $this->imap->conn;
+ }
}
- return $conn;
+ return false;
}
@@ -479,6 +481,10 @@
*/
public function session_init()
{
+ // session started (Installer?)
+ if (session_id())
+ return;
+
$lifetime = $this->config->get('session_lifetime', 0) * 60;
// set session domain
@@ -520,6 +526,9 @@
*/
public function session_configure()
{
+ if (!$this->session)
+ return;
+
$lifetime = $this->config->get('session_lifetime', 0) * 60;
// set keep-alive/check-recent interval
@@ -631,7 +640,7 @@
else {
raise_error(array(
'code' => 600, 'type' => 'php',
- 'file' => __FILE__, 'line' => __LINE__,
+ 'file' => __FILE__, 'line' => __LINE__,
'message' => "Failed to create a user record. Maybe aborted by a plugin?"
), true, false);
}
@@ -957,10 +966,8 @@
*/
public function shutdown()
{
- if (is_object($this->imap)) {
+ if (is_object($this->imap))
$this->imap->close();
- $this->imap->write_cache();
- }
if (is_object($this->smtp))
$this->smtp->disconnect();
@@ -980,7 +987,10 @@
$mem .= '/'.show_bytes(memory_get_peak_usage());
$log = $this->task . ($this->action ? '/'.$this->action : '') . ($mem ? " [$mem]" : '');
- rcube_print_time(RCMAIL_START, $log);
+ if (defined('RCMAIL_START'))
+ rcube_print_time(RCMAIL_START, $log);
+ else
+ console($log);
}
}
@@ -1065,23 +1075,25 @@
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
}
- else if (function_exists('des'))
- {
- define('DES_IV_SIZE', 8);
- $iv = '';
- for ($i = 0; $i < constant('DES_IV_SIZE'); $i++)
- $iv .= sprintf("%c", mt_rand(0, 255));
- $cipher = $iv . des($this->config->get_crypto_key($key), $clear, 1, 1, $iv);
+ else {
+ @include_once('lib/des.inc');
+
+ if (function_exists('des')) {
+ $des_iv_size = 8;
+ $iv = '';
+ for ($i = 0; $i < $des_iv_size; $i++)
+ $iv .= sprintf("%c", mt_rand(0, 255));
+ $cipher = $iv . des($this->config->get_crypto_key($key), $clear, 1, 1, $iv);
+ }
+ else {
+ 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"
+ ), true, true);
+ }
}
- else
- {
- 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"
- ), true, true);
- }
-
+
return $base64 ? base64_encode($cipher) : $cipher;
}
@@ -1111,22 +1123,24 @@
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
}
- else if (function_exists('des'))
- {
- define('DES_IV_SIZE', 8);
- $iv = substr($cipher, 0, constant('DES_IV_SIZE'));
- $cipher = substr($cipher, constant('DES_IV_SIZE'));
- $clear = des($this->config->get_crypto_key($key), $cipher, 0, 1, $iv);
+ else {
+ @include_once('lib/des.inc');
+
+ if (function_exists('des')) {
+ $des_iv_size = 8;
+ $iv = substr($cipher, 0, $des_iv_size);
+ $cipher = substr($cipher, $des_iv_size);
+ $clear = des($this->config->get_crypto_key($key), $cipher, 0, 1, $iv);
+ }
+ else {
+ raise_error(array(
+ 'code' => 500, 'type' => 'php',
+ 'file' => __FILE__, 'line' => __LINE__,
+ 'message' => "Could not perform decryption; make sure Mcrypt is installed or lib/des.inc is available"
+ ), true, true);
+ }
}
- else
- {
- raise_error(array(
- 'code' => 500, 'type' => 'php',
- 'file' => __FILE__, 'line' => __LINE__,
- 'message' => "Could not perform decryption; make sure Mcrypt is installed or lib/des.inc is available"
- ), true, true);
- }
-
+
/*-
* Trim PHP's padding and the canary byte; see note in
* rcmail::encrypt() and http://php.net/mcrypt_generic#68082
--
Gitblit v1.9.1