Aleksander Machniak
2014-12-09 ecf6c79d00a8ed722a6664f276a0f015de4d13c2
program/lib/Roundcube/rcube.php
@@ -842,6 +842,7 @@
         * upon decryption; see http://php.net/mcrypt_generic#68082
         */
        $clear = pack("a*H2", $clear, "80");
        $ckey  = $this->config->get_crypto_key($key);
        if (function_exists('openssl_encrypt')) {
            $method = 'DES-EDE3-CBC';
@@ -853,7 +854,7 @@
            ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_CBC, ""))
        ) {
            $iv = $this->create_iv(mcrypt_enc_get_iv_size($td));
            mcrypt_generic_init($td, $this->config->get_crypto_key($key), $iv);
            mcrypt_generic_init($td, $ckey, $iv);
            $cipher = $iv . mcrypt_generic($td, $clear);
            mcrypt_generic_deinit($td);
            mcrypt_module_close($td);
@@ -864,7 +865,7 @@
            if (function_exists('des')) {
                $des_iv_size = 8;
                $iv = $this->create_iv($des_iv_size);
                $cipher = $iv . des($this->config->get_crypto_key($key), $clear, 1, 1, $iv);
                $cipher = $iv . des($ckey, $clear, 1, 1, $iv);
            }
            else {
                self::raise_error(array(
@@ -895,6 +896,7 @@
        }
        $cipher = $base64 ? base64_decode($cipher) : $cipher;
        $ckey   = $this->config->get_crypto_key($key);
        if (function_exists('openssl_decrypt')) {
            $method  = 'DES-EDE3-CBC';
@@ -914,7 +916,7 @@
            ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_CBC, ""))
        ) {
            $iv_size = mcrypt_enc_get_iv_size($td);
            $iv = substr($cipher, 0, $iv_size);
            $iv      = substr($cipher, 0, $iv_size);
            // session corruption? (#1485970)
            if (strlen($iv) < $iv_size) {
@@ -922,7 +924,7 @@
            }
            $cipher = substr($cipher, $iv_size);
            mcrypt_generic_init($td, $this->config->get_crypto_key($key), $iv);
            mcrypt_generic_init($td, $ckey, $iv);
            $clear = mdecrypt_generic($td, $cipher);
            mcrypt_generic_deinit($td);
            mcrypt_module_close($td);
@@ -932,15 +934,15 @@
            if (function_exists('des')) {
                $des_iv_size = 8;
                $iv = substr($cipher, 0, $des_iv_size);
                $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);
                $clear  = des($ckey, $cipher, 0, 1, $iv);
            }
            else {
                self::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"
                    'message' => "Could not perform decryption; make sure OpenSSL or Mcrypt or lib/des.inc is available"
                    ), true, true);
            }
        }
@@ -1549,7 +1551,7 @@
        // send thru SMTP server using custom SMTP library
        if ($this->config->get('smtp_server')) {
            // generate list of recipients
            $a_recipients = array($mailto);
            $a_recipients = (array) $mailto;
            if (strlen($headers['Cc']))
                $a_recipients[] = $headers['Cc'];
@@ -1649,19 +1651,24 @@
            // remove MDN headers after sending
            unset($headers['Return-Receipt-To'], $headers['Disposition-Notification-To']);
            // get all recipients
            if ($headers['Cc'])
                $mailto .= $headers['Cc'];
            if ($headers['Bcc'])
                $mailto .= $headers['Bcc'];
            if (preg_match_all('/<([^@]+@[^>]+)>/', $mailto, $m))
                $mailto = implode(', ', array_unique($m[1]));
            if ($this->config->get('smtp_log')) {
                // get all recipient addresses
                if (is_array($mailto)) {
                    $mailto = implode(',', $mailto);
                }
                if ($headers['Cc']) {
                    $mailto .= ',' . $headers['Cc'];
                }
                if ($headers['Bcc']) {
                    $mailto .= ',' . $headers['Bcc'];
                }
                $mailto = rcube_mime::decode_address_list($mailto, null, false, null, true);
                self::write_log('sendmail', sprintf("User %s [%s]; Message for %s; %s",
                    $this->user->get_username(),
                    $_SERVER['REMOTE_ADDR'],
                    $mailto,
                    rcube_utils::remote_addr(),
                    implode(', ', $mailto),
                    !empty($response) ? join('; ', $response) : ''));
            }
        }