alecpl
2010-05-06 bec31a4e86ac0d6b569e7b9601b0bde4a0e26a16
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