CHANGELOG | ●●●●● patch | view | raw | blame | history | |
config/defaults.inc.php | ●●●●● patch | view | raw | blame | history | |
program/lib/Roundcube/rcube_imap.php | ●●●●● patch | view | raw | blame | history | |
program/lib/Roundcube/rcube_imap_cache.php | ●●●●● patch | view | raw | blame | history |
CHANGELOG
@@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== - Make cached message size limit configurable - messages_cache_threshold (#1489317) - Make identities matching case insensitive (#1485480) - Fix issue where too big message data was stored in cache causing sql errors (#1489316) - Log also failed logins to userlogins log config/defaults.inc.php
@@ -164,6 +164,11 @@ // Lifetime of messages cache. Possible units: s, m, h, d, w $config['messages_cache_ttl'] = '10d'; // Maximum cached message size in kilobytes. // Note: On MySQL this should be less than (max_allowed_packet - 30%) $config['messages_cache_threshold'] = 50; // ---------------------------------- // SMTP // ---------------------------------- program/lib/Roundcube/rcube_imap.php
@@ -3785,9 +3785,10 @@ if ($this->messages_caching && !$this->mcache) { $rcube = rcube::get_instance(); if (($dbh = $rcube->get_dbh()) && ($userid = $rcube->get_user_id())) { $ttl = $rcube->config->get('messages_cache_ttl', '10d'); $ttl = $rcube->config->get('messages_cache_ttl', '10d'); $threshold = $rcube->config->get('messages_cache_threshold', 50); $this->mcache = new rcube_imap_cache( $dbh, $this, $userid, $this->options['skip_deleted'], $ttl); $dbh, $this, $userid, $this->options['skip_deleted'], $ttl, $threshold); } } program/lib/Roundcube/rcube_imap_cache.php
@@ -56,6 +56,13 @@ private $ttl; /** * Maximum cached message size * * @var int */ private $threshold; /** * Internal (in-memory) cache * * @var array @@ -96,9 +103,9 @@ * @param int $userid User identifier * @param bool $skip_deleted skip_deleted flag * @param string $ttl Expiration time of memcache/apc items * * @param int $threshold Maximum cached message size */ function __construct($db, $imap, $userid, $skip_deleted, $ttl=0) function __construct($db, $imap, $userid, $skip_deleted, $ttl=0, $threshold=0) { // convert ttl string to seconds $ttl = get_offset_sec($ttl); @@ -109,6 +116,7 @@ $this->userid = $userid; $this->skip_deleted = $skip_deleted; $this->ttl = $ttl; $this->threshold = $threshold; } @@ -1174,11 +1182,16 @@ * * @param rcube_message_header|rcube_message_part */ private function message_object_prepare(&$msg) private function message_object_prepare(&$msg, &$size = 0) { // Remove body too big (>25kB) if ($msg->body && strlen($msg->body) > 25 * 1024) { unset($msg->body); // Remove body too big if ($msg->body && ($length = strlen($msg->body))) { $size += $length; if ($size > $this->threshold * 1024) { $size -= $length; unset($msg->body); } } // Fix mimetype which might be broken by some code when message is displayed @@ -1192,13 +1205,13 @@ if (is_array($msg->structure->parts)) { foreach ($msg->structure->parts as $part) { $this->message_object_prepare($part); $this->message_object_prepare($part, $size); } } if (is_array($msg->parts)) { foreach ($msg->parts as $part) { $this->message_object_prepare($part); $this->message_object_prepare($part, $size); } } }