Projects
Kolab:3.4
roundcubemail
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 61
View file
roundcubemail.spec
Changed
@@ -43,7 +43,7 @@ Name: roundcubemail Version: 1.1 -Release: 0.5.dev20141012.git94791f6fd%{?dist} +Release: 0.6.dev20141111.git01bc27536%{?dist} Summary: Round Cube Webmail is a browser-based multilingual IMAP client @@ -51,7 +51,7 @@ License: GPLv2 URL: http://www.roundcube.net -# From GIT 94791f6fd5a0e742cda92c73bfb16fda00761850 +# From GIT 01bc27536a7a78a74ce7b316fed102150b5dbcc3 Source0: roundcubemail-1.1.tar.gz Source1: comm.py
View file
roundcubemail-1.1-collated.patch
Changed
@@ -1,6 +1,6 @@ diff -ur roundcubemail-1.1.orig/config/defaults.inc.php roundcubemail-1.1/config/defaults.inc.php ---- roundcubemail-1.1.orig/config/defaults.inc.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/config/defaults.inc.php 2014-11-05 12:46:36.186520550 +0100 +--- roundcubemail-1.1.orig/config/defaults.inc.php 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/config/defaults.inc.php 2014-11-14 14:07:29.184969453 +0100 @@ -430,7 +430,7 @@ // Password charset. // Use it if your authentication backend doesn't support UTF-8. @@ -10,7 +10,7 @@ // How many seconds must pass between emails sent by a user $config['sendmail_delay'] = 0; -@@ -532,6 +532,23 @@ +@@ -532,6 +532,28 @@ // Note: useful when SMTP server stores sent mail in user mailbox $config['no_save_sent_messages'] = false; @@ -31,10 +31,15 @@ +// </FilesMatch> +$config['assets_path'] = '/roundcubemail/assets/'; + ++// While assets_path is for the browser, assets_dir informs ++// PHP code about the location of asset files in filesystem ++$config['assets_dir'] = '/usr/share/roundcubemail/public_html/assets/'; ++ ++ // ---------------------------------- // PLUGINS // ---------------------------------- -@@ -625,7 +642,7 @@ +@@ -625,7 +647,7 @@ // Since Google shut down their public spell checking service, the default settings // connect to http://spell.roundcube.net which is a hosted service provided by Roundcube. // You can connect to any other googie-compliant service by setting 'spellcheck_uri' accordingly. @@ -43,7 +48,7 @@ // For locally installed Nox Spell Server or After the Deadline services, // please specify the URI to call it. -@@ -1008,7 +1025,7 @@ +@@ -1008,7 +1030,7 @@ $config['display_next'] = true; // Default messages listing mode. One of 'threads' or 'list'. @@ -54,8 +59,8 @@ // 1 - Expand all threads automatically Only in roundcubemail-1.1/config: defaults.inc.php.orig diff -ur roundcubemail-1.1.orig/.htaccess roundcubemail-1.1/.htaccess ---- roundcubemail-1.1.orig/.htaccess 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/.htaccess 2014-11-05 12:46:36.166520529 +0100 +--- roundcubemail-1.1.orig/.htaccess 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/.htaccess 2014-11-14 14:07:29.183969452 +0100 @@ -30,7 +30,7 @@ # security rules: # - deny access to files not containing a dot or starting with a dot @@ -66,8 +71,8 @@ RewriteRule ^/?(\.git|\.tx|SQL|bin|config|logs|temp|tests|program\/(include|lib|localization|steps)) - [F] # - deny access to some documentation files diff -ur roundcubemail-1.1.orig/index.php roundcubemail-1.1/index.php ---- roundcubemail-1.1.orig/index.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/index.php 2014-11-05 12:46:36.167520530 +0100 +--- roundcubemail-1.1.orig/index.php 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/index.php 2014-11-14 14:07:29.184969453 +0100 @@ -90,9 +90,9 @@ // try to log in @@ -140,8 +145,8 @@ // check access to disabled actions $disabled_actions = (array) $RCMAIL->config->get('disabled_actions'); diff -ur roundcubemail-1.1.orig/plugins/acl/acl.js roundcubemail-1.1/plugins/acl/acl.js ---- roundcubemail-1.1.orig/plugins/acl/acl.js 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/plugins/acl/acl.js 2014-11-05 12:46:36.168520531 +0100 +--- roundcubemail-1.1.orig/plugins/acl/acl.js 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/plugins/acl/acl.js 2014-11-14 14:07:29.185969454 +0100 @@ -58,8 +58,11 @@ var users = this.acl_get_usernames(); @@ -191,8 +196,8 @@ // Cancel/Hide form diff -ur roundcubemail-1.1.orig/plugins/acl/acl.php roundcubemail-1.1/plugins/acl/acl.php ---- roundcubemail-1.1.orig/plugins/acl/acl.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/plugins/acl/acl.php 2014-11-05 12:46:36.169520532 +0100 +--- roundcubemail-1.1.orig/plugins/acl/acl.php 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/plugins/acl/acl.php 2014-11-14 14:07:29.185969454 +0100 @@ -454,10 +454,10 @@ */ private function action_save() @@ -219,9 +224,21 @@ $user = explode(',', $user); +diff -ur roundcubemail-1.1.orig/plugins/legacy_browser/js/iehacks.js roundcubemail-1.1/plugins/legacy_browser/js/iehacks.js +--- roundcubemail-1.1.orig/plugins/legacy_browser/js/iehacks.js 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/plugins/legacy_browser/js/iehacks.js 2014-11-14 14:07:29.185969454 +0100 +@@ -102,7 +102,7 @@ + rcube_webmail.prototype.async_upload_form_frame = function(name) + { + document.body.insertAdjacentHTML('BeforeEnd', '<iframe name="' + name + '"' +- + ' src="program/resources/blank.gif" style="width:0; height:0; visibility:hidden"></iframe>'); ++ + ' src="' + rcmail.assets_path('program/resources/blank.gif') + '" style="width:0; height:0; visibility:hidden"></iframe>'); + + return $('iframe[name="' + name + '"]'); + }; diff -ur roundcubemail-1.1.orig/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php roundcubemail-1.1/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php ---- roundcubemail-1.1.orig/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php 2014-11-05 12:46:36.171520534 +0100 +--- roundcubemail-1.1.orig/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php 2014-11-14 14:07:29.186969456 +0100 @@ -349,7 +349,7 @@ } } @@ -267,26 +284,27 @@ $content = $this->action_div($fid, $id, false); diff -ur roundcubemail-1.1.orig/program/include/rcmail_output_html.php roundcubemail-1.1/program/include/rcmail_output_html.php ---- roundcubemail-1.1.orig/program/include/rcmail_output_html.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/include/rcmail_output_html.php 2014-11-05 13:56:12.263999725 +0100 -@@ -45,6 +45,7 @@ +--- roundcubemail-1.1.orig/program/include/rcmail_output_html.php 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/include/rcmail_output_html.php 2014-11-14 14:07:29.188969458 +0100 +@@ -45,6 +45,8 @@ protected $footer = ''; protected $body = ''; protected $base_path = ''; + protected $assets_path; ++ protected $assets_dir = RCUBE_INSTALL_PATH; protected $devel_mode = false; // deprecated names of templates used before 0.5 -@@ -80,6 +81,8 @@ +@@ -80,6 +82,8 @@ $this->set_skin($skin); $this->set_env('skin', $skin); -+ $this->set_assets_path($this->config->get('assets_path')); ++ $this->set_assets_path($this->config->get('assets_path'), $this->config->get('assets_dir')); + if (!empty($_REQUEST['_extwin'])) $this->set_env('extwin', 1); if ($this->framed || $framed) -@@ -145,6 +148,51 @@ +@@ -145,6 +149,55 @@ } /** @@ -294,7 +312,7 @@ + * + * @param string Assets path (relative or absolute URL) + */ -+ public function set_assets_path($path) ++ public function set_assets_path($path, $fs_dir = null) + { + if (empty($path)) { + return; @@ -302,32 +320,36 @@ + + $path = rtrim($path, '/') . '/'; + -+ // convert to absolute URL -+ if (!preg_match('|^https?://|', $path)) { -+ if ($path[0] != '/') { -+ $base = preg_replace('/[?#&].*$/', '', $_SERVER['REQUEST_URI']); -+ $base = rtrim($base, '/'); -+ } ++ // handle relative assets path ++ if (!preg_match('|^https?://|', $path) && $path[0] != '/') { ++ // save the path to search for asset files later ++ $this->assets_dir = $path; ++ ++ $base = preg_replace('/[?#&].*$/', '', $_SERVER['REQUEST_URI']); ++ $base = rtrim($base, '/'); + + // remove url token if exists + if ($len = intval($this->config->get('use_secure_urls'))) { + $_base = explode('/', $base); ++ $last = count($_base) - 1; + $length = $len > 1 ? $len : 16; // as in rcube::get_secure_url_token() + + // we can't use real token here because it + // does not exists in unauthenticated state, + // hope this will not produce false-positive matches -+ foreach ($_base as $idx => $token) { -+ if (preg_match('/^[a-f0-9]{' . $length . '}$/', $token)) { -+ unset($_base[$idx]); -+ break; -+ } ++ if ($last > -1 && preg_match('/^[a-f0-9]{' . $length . '}$/', $_base[$last])) { ++ $path = '../' . $path; + } ++ } ++ } + -+ $base = implode('/', $_base); ++ // set filesystem path for assets ++ if ($fs_dir) { ++ if ($fs_dir[0] != '/') { ++ $fs_dir = realpath(RCUBE_INSTALL_PATH . $fs_dir); + } -+ $path = (rcube_utils::https_check() ? 'https' : 'http') . '://' -+ . $_SERVER['HTTP_HOST'] . rtrim($base, '/') . '/' . ltrim($path, '/'); ++ // ensure the path ends with a slash ++ $this->assets_dir = rtrim($fs_dir, '/') . '/'; + } + + $this->assets_path = $path; @@ -338,36 +360,37 @@ * Getter for the current page title * * @return string The page title -@@ -261,10 +309,27 @@ +@@ -251,6 +304,7 @@ + * @param string File name/path to resolve (starting with /) + * @param string Reference to the base path of the matching skin + * @param string Additional path to search in ++ * + * @return mixed Relative path to the requested file or False if not found + */ + public function get_skin_file($file, &$skin_path = null, $add_path = null) +@@ -261,10 +315,19 @@ } foreach ($skin_paths as $skin_path) { - $path = realpath($skin_path . $file); -+ $path = $skin_path . $file; +- if (is_file($path)) { ++ $path = realpath(RCUBE_INSTALL_PATH . $skin_path . $file); + - if (is_file($path)) { ++ if ($path && is_file($path)) { return $skin_path . $file; } + -+ $path = rtrim(RCUBE_INSTALL_PATH, '/'); -+ $path .= '/' . 'public_html/assets/'; -+ $path .= rtrim($skin_path, '/') . '/' . $file; -+ -+ if (is_file($path)) { -+ return $skin_path . $file; -+ } ++ if ($this->assets_dir != RCUBE_INSTALL_PATH) { ++ $path = realpath($this->assets_dir . $skin_path . $file); + -+ $path = rtrim(RCUBE_INSTALL_PATH, '/'); -+ $path .= '/' . $skin_path . $file; -+ $path = realpath($path); -+ -+ if ($skin_path[0] != '/' && is_file($path)) { -+ return $path; ++ if ($path && is_file($path)) { ++ return $skin_path . $file; ++ } + } } return false; -@@ -369,14 +434,15 @@ +@@ -369,14 +432,15 @@ /** * Redirect to a certain url * @@ -387,31 +410,21 @@ header('Location: ' . $location); exit; } -@@ -494,9 +560,10 @@ +@@ -490,11 +554,11 @@ + // find skin template + $path = false; + foreach ($this->skin_paths as $skin_path) { +- $path = "$skin_path/templates/$name.html"; ++ $path = RCUBE_INSTALL_PATH . "$skin_path/templates/$name.html"; // fallback to deprecated template names if (!is_readable($path) && $this->deprecated_templates[$realname]) { - $path = "$skin_path/templates/" . $this->deprecated_templates[$realname] . ".html"; -+ // Try an old path -+ $tpath = "$skin_path/templates/" . $this->deprecated_templates[$realname] . ".html"; ++ $path = RCUBE_INSTALL_PATH . "$skin_path/templates/" . $this->deprecated_templates[$realname] . ".html"; -- if (is_readable($path)) { -+ if (is_readable($tpath)) { + if (is_readable($path)) { rcube::raise_error(array( - 'code' => 502, 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, -@@ -506,6 +573,10 @@ - } - } - -+ if (!is_readable($path) && $path[0] != '/' && is_readable(rtrim(RCUBE_INSTALL_PATH, '/') . '/' . $path)) { -+ $path = rtrim(RCUBE_INSTALL_PATH, '/') . '/' . $path; -+ } -+ - if (is_readable($path)) { - $this->config->set('skin_path', $skin_path); - $this->base_path = preg_replace('!plugins/\w+/!', '', $skin_path); // set base_path to core skin directory (not plugin's skin) -@@ -667,6 +738,24 @@ +@@ -667,6 +731,21 @@ exit; } @@ -422,12 +435,9 @@ + { + // iframe content can't be in a different domain + // @TODO: check if assests are on a different domain -+ if (!$this->assets_path || $path == $this->env['blankpage']) { -+ return $path; -+ } + -+ if ($path[0] == '.' && $path[1] == '/') { -+ $path = substr($path, 2); ++ if (!$this->assets_path || in_array($path[0], array('?', '/', '.')) || strpos($path, '://')) { ++ return $path; + } + + return $this->assets_path . $path; @@ -436,33 +446,95 @@ /***** Template parsing methods *****/ -@@ -723,6 +812,8 @@ - $file = $this->file_mod($file); - } +@@ -704,7 +783,7 @@ + } -+ $file = $this->asset_url($file); -+ - return $matches[1] . '=' . $matches[2] . $file . $matches[4]; + /** +- * Callback function for preg_replace_callback in write() ++ * Callback function for preg_replace_callback in fix_paths() + * + * @return string Parsed string + */ +@@ -727,6 +806,28 @@ } -@@ -1337,6 +1428,7 @@ - { - if (!preg_match('|^https?://|i', $file) && $file[0] != '/') { - $file = $this->file_mod($this->scripts_path . $file); -+ $file = $this->asset_url($file); + /** ++ * Correct paths of asset files according to assets_path ++ */ ++ protected function fix_assets_paths($output) ++ { ++ return preg_replace_callback( ++ '!(src|href|background)=(["\']?)([a-z0-9/_.?=-]+)(["\'\s>])!i', ++ array($this, 'assets_callback'), $output); ++ } ++ ++ /** ++ * Callback function for preg_replace_callback in fix_assets_paths() ++ * ++ * @return string Parsed string ++ */ ++ protected function assets_callback($matches) ++ { ++ $file = $this->asset_url($matches[3]); ++ ++ return $matches[1] . '=' . $matches[2] . $file . $matches[4]; ++ } ++ ++ /** + * Modify file by adding mtime indicator + */ + protected function file_mod($file) +@@ -737,12 +838,12 @@ + // use minified file if exists (not in development mode) + if (!$this->devel_mode && !preg_match('/\.min\.' . $ext . '$/', $file)) { + $minified_file = substr($file, 0, strlen($ext) * -1) . 'min.' . $ext; +- if ($fs = @filemtime($minified_file)) { ++ if ($fs = @filemtime($this->assets_dir . $minified_file)) { + return $minified_file . '?s=' . $fs; + } } - if (!is_array($this->script_files[$position])) { -@@ -1549,7 +1641,7 @@ +- if ($fs = @filemtime($file)) { ++ if ($fs = @filemtime($this->assets_dir . $file)) { + $file .= '?s=' . $fs; + } + +@@ -969,7 +1070,7 @@ + if (!empty($attrib['skin_path'])) $attrib['skinpath'] = $attrib['skin_path']; + if ($path = $this->get_skin_file($attrib['file'], $skin_path, $attrib['skinpath'])) { + $this->base_path = preg_replace('!plugins/\w+/!', '', $skin_path); // set base_path to core skin directory (not plugin's skin) +- $path = realpath($path); ++ $path = realpath(RCUBE_INSTALL_PATH . $path); + } + + if (is_readable($path)) { +@@ -1521,6 +1622,10 @@ + + $output = $this->parse_with_globals($this->fix_paths($output)); + ++ if ($this->assets_path) { ++ $output = $this->fix_assets_paths($output); ++ } ++ + // trigger hook with final HTML content to be sent + $hook = $this->app->plugins->exec_hook("send_page", array('content' => $output)); + if (!$hook['abort']) { +@@ -1549,12 +1654,12 @@ } $attrib['name'] = $attrib['id']; - $attrib['src'] = $attrib['src'] ? $this->abs_url($attrib['src'], true) : 'program/resources/blank.gif'; -+ $attrib['src'] = $this->asset_url($attrib['src'] ? $this->abs_url($attrib['src'], true) : 'program/resources/blank.gif'); ++ $attrib['src'] = $attrib['src'] ? $this->abs_url($attrib['src'], true) : 'program/resources/blank.gif'; // register as 'contentframe' object if ($is_contentframe || $attrib['contentframe']) { -@@ -1766,9 +1858,11 @@ + $this->set_env('contentframe', $attrib['contentframe'] ? $attrib['contentframe'] : $attrib['name']); +- $this->set_env('blankpage', $attrib['src']); ++ $this->set_env('blankpage', $this->asset_url($attrib['src'])); + } + + return html::iframe($attrib); +@@ -1766,9 +1871,11 @@ { $images = preg_split('/[\s\t\n,]+/', $attrib['images'], -1, PREG_SPLIT_NO_EMPTY); $images = array_map(array($this, 'abs_url'), $images); @@ -476,8 +548,8 @@ $this->add_script('var images = ' . self::json_serialize($images) .'; for (var i=0; i<images.length; i++) { diff -ur roundcubemail-1.1.orig/program/include/rcmail_output_json.php roundcubemail-1.1/program/include/rcmail_output_json.php ---- roundcubemail-1.1.orig/program/include/rcmail_output_json.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/include/rcmail_output_json.php 2014-11-05 12:46:36.174520537 +0100 +--- roundcubemail-1.1.orig/program/include/rcmail_output_json.php 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/include/rcmail_output_json.php 2014-11-14 14:07:29.189969460 +0100 @@ -181,6 +181,11 @@ */ public function raise_error($code, $message) @@ -490,9 +562,20 @@ $this->show_message("Application Error ($code): $message", 'error'); $this->remote_response(); exit; +diff -ur roundcubemail-1.1.orig/program/include/rcmail_output.php roundcubemail-1.1/program/include/rcmail_output.php +--- roundcubemail-1.1.orig/program/include/rcmail_output.php 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/include/rcmail_output.php 2014-11-14 14:07:29.187969457 +0100 +@@ -28,6 +28,7 @@ + abstract class rcmail_output extends rcube_output + { + const JS_OBJECT_NAME = 'rcmail'; ++ const BLANK_GIF = 'R0lGODlhDwAPAIAAAMDAwAAAACH5BAEAAAAALAAAAAAPAA8AQAINhI+py+0Po5y02otnAQA7'; + + public $type = 'html'; + public $ajax_call = false; diff -ur roundcubemail-1.1.orig/program/include/rcmail.php roundcubemail-1.1/program/include/rcmail.php ---- roundcubemail-1.1.orig/program/include/rcmail.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/include/rcmail.php 2014-11-05 12:46:36.175520538 +0100 +--- roundcubemail-1.1.orig/program/include/rcmail.php 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/include/rcmail.php 2014-11-14 14:07:29.187969457 +0100 @@ -760,49 +760,16 @@ } @@ -545,17 +628,19 @@ { if (!is_array($p)) { if (strpos($p, 'http') === 0) { -@@ -828,9 +795,21 @@ +@@ -828,9 +795,23 @@ } } -+ $base_path = preg_replace('![^/]+$!', '', strval($_SERVER['SCRIPT_NAME'])); ++ $base_path = strval($_SERVER['REDIRECT_SCRIPT_URL'] ?: $_SERVER['SCRIPT_NAME']); ++ $base_path = preg_replace('![^/]+$!', '', $base_path); + + if ($secure && ($token = $this->get_secure_url_token(true))) { + // add token to the url + $url = $token . '/' . $url; + + // remove old token from the path ++ $base_path = rtrim($base_path, '/'); + $base_path = preg_replace('/\/[a-f0-9]{' . strlen($token) . '}$/', '', $base_path); + + // this need to be full url to make redirects work @@ -568,7 +653,7 @@ if ($base_path == '') $base_path = '/'; $prefix = $base_path; -@@ -879,6 +858,36 @@ +@@ -879,6 +860,36 @@ } } @@ -606,8 +691,8 @@ * Registers action aliases for current task * diff -ur roundcubemail-1.1.orig/program/js/app.js roundcubemail-1.1/program/js/app.js ---- roundcubemail-1.1.orig/program/js/app.js 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/js/app.js 2014-11-05 12:46:36.179520543 +0100 +--- roundcubemail-1.1.orig/program/js/app.js 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/js/app.js 2014-11-14 14:07:29.191969462 +0100 @@ -58,7 +58,6 @@ request_timeout: 180, // seconds draft_autosave: 0, // seconds @@ -616,18 +701,17 @@ recipients_separator: ',', recipients_delimiter: ', ', popup_width: 1150, -@@ -163,6 +162,10 @@ +@@ -163,6 +162,9 @@ return; } + if (!this.env.blankpage) -+ this.env.blankpage = (this.env.assets_path ? this.env.assets_path : '') + 'program/resources/blank.gif'; -+ ++ this.env.blankpage = this.assets_path('program/resources/blank.gif'); + // find all registered gui containers for (n in this.gui_containers) this.gui_containers[n] = $('#'+this.gui_containers[n]); -@@ -1405,8 +1408,10 @@ +@@ -1405,8 +1407,10 @@ if (task == 'mail') url += '&_mbox=INBOX'; @@ -639,7 +723,7 @@ this.redirect(url); }; -@@ -1416,7 +1421,10 @@ +@@ -1416,7 +1420,10 @@ if (!url) url = this.env.comm_path; @@ -651,18 +735,34 @@ }; this.reload = function(delay) -@@ -7982,7 +7990,7 @@ +@@ -7982,7 +7989,7 @@ img.onload = function() { ref.env.browser_capabilities.tif = 1; }; img.onerror = function() { ref.env.browser_capabilities.tif = 0; }; - img.src = 'program/resources/blank.tif'; -+ img.src = (this.env.assets_path ? this.env.assets_path : '') + 'program/resources/blank.tif'; ++ img.src = this.assets_path('program/resources/blank.tif'); }; this.pdf_support_check = function() +@@ -8039,6 +8046,15 @@ + return 0; + }; + ++ this.assets_path = function(path) ++ { ++ if (this.env.assets_path && !path.startsWith(this.env.assets_path)) { ++ path = this.env.assets_path + path; ++ } ++ ++ return path; ++ }; ++ + // Cookie setter + this.set_cookie = function(name, value, expires) + { diff -ur roundcubemail-1.1.orig/program/js/editor.js roundcubemail-1.1/program/js/editor.js ---- roundcubemail-1.1.orig/program/js/editor.js 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/js/editor.js 2014-11-05 12:46:36.181520545 +0100 +--- roundcubemail-1.1.orig/program/js/editor.js 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/js/editor.js 2014-11-14 14:07:29.192969463 +0100 @@ -36,11 +36,12 @@ function rcube_text_editor(config, id) { @@ -673,7 +773,7 @@ theme: 'modern', language: config.lang, - content_css: 'program/js/tinymce/roundcube/content.css?v2', -+ content_css: (rcmail.env.assets_path || '') + 'program/js/tinymce/roundcube/content.css?v2', ++ content_css: rcmail.assets_path('program/js/tinymce/roundcube/content.css?v2'), menubar: false, statusbar: false, toolbar_items_size: 'small', @@ -687,8 +787,8 @@ accessibility_focus: false, file_browser_callback: function(name, url, type, win) { ref.file_browser_callback(name, url, type); }, diff -ur roundcubemail-1.1.orig/program/lib/Roundcube/rcube_ldap.php roundcubemail-1.1/program/lib/Roundcube/rcube_ldap.php ---- roundcubemail-1.1.orig/program/lib/Roundcube/rcube_ldap.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/lib/Roundcube/rcube_ldap.php 2014-11-05 12:46:19.849500765 +0100 +--- roundcubemail-1.1.orig/program/lib/Roundcube/rcube_ldap.php 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/lib/Roundcube/rcube_ldap.php 2014-11-14 14:07:37.385980405 +0100 @@ -853,7 +853,7 @@ // add general filter to query @@ -700,8 +800,8 @@ $this->set_search_set($filter); Only in roundcubemail-1.1/program/lib/Roundcube: rcube_ldap.php.orig diff -ur roundcubemail-1.1.orig/program/lib/Roundcube/rcube.php roundcubemail-1.1/program/lib/Roundcube/rcube.php ---- roundcubemail-1.1.orig/program/lib/Roundcube/rcube.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/lib/Roundcube/rcube.php 2014-11-05 12:46:36.182520546 +0100 +--- roundcubemail-1.1.orig/program/lib/Roundcube/rcube.php 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/lib/Roundcube/rcube.php 2014-11-14 14:07:29.193969465 +0100 @@ -28,9 +28,15 @@ */ class rcube @@ -732,10 +832,11 @@ /* private/protected vars */ protected $texts; -@@ -978,6 +990,104 @@ +@@ -977,6 +989,104 @@ + } - /** ++ /** + * Returns session token for secure URLs + * + * @param bool $generate Generate token if not exists in session yet @@ -833,22 +934,12 @@ + } + + -+ /** + /** * Build a valid URL to this instance of Roundcube * - * @param mixed Either a string with the action or url parameters as key-value pairs -@@ -1265,7 +1375,7 @@ - - $cli = php_sapi_name() == 'cli'; - -- if (($log || $terminate) && !$cli && $arg['message']) { -+ if ($log && !$cli && $arg['message']) { - $arg['fatal'] = $terminate; - self::log_bug($arg); - } diff -ur roundcubemail-1.1.orig/program/steps/addressbook/delete.inc roundcubemail-1.1/program/steps/addressbook/delete.inc ---- roundcubemail-1.1.orig/program/steps/addressbook/delete.inc 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/steps/addressbook/delete.inc 2014-11-05 12:46:36.183520547 +0100 +--- roundcubemail-1.1.orig/program/steps/addressbook/delete.inc 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/steps/addressbook/delete.inc 2014-11-14 14:07:29.193969465 +0100 @@ -20,10 +20,11 @@ */ @@ -864,9 +955,25 @@ // remove previous deletes diff -ur roundcubemail-1.1.orig/program/steps/addressbook/func.inc roundcubemail-1.1/program/steps/addressbook/func.inc ---- roundcubemail-1.1.orig/program/steps/addressbook/func.inc 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/steps/addressbook/func.inc 2014-11-05 12:46:36.184520548 +0100 -@@ -896,13 +896,13 @@ +--- roundcubemail-1.1.orig/program/steps/addressbook/func.inc 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/steps/addressbook/func.inc 2014-11-14 14:07:29.194969467 +0100 +@@ -785,11 +785,12 @@ + if ($result = $CONTACTS->get_result()) + $record = $result->first(); + +- $photo_img = $attrib['placeholder'] ? $RCMAIL->output->get_skin_file($attrib['placeholder']) : 'program/resources/blank.gif'; ++ $photo_img = $attrib['placeholder'] ? $RCMAIL->output->abs_url($attrib['placeholder'], true) : 'program/resources/blank.gif'; + if ($record['_type'] == 'group' && $attrib['placeholdergroup']) +- $photo_img = $RCMAIL->output->get_skin_file($attrib['placeholdergroup']); ++ $photo_img = $RCMAIL->output->abs_url($attrib['placeholdergroup'], true); ++ ++ $RCMAIL->output->set_env('photo_placeholder', $RCMAIL->output->asset_url($photo_img)); + +- $RCMAIL->output->set_env('photo_placeholder', $photo_img); + unset($attrib['placeholder']); + + $plugin = $RCMAIL->plugins->exec_hook('contact_photo', array('record' => $record, 'data' => $record['photo'])); +@@ -896,13 +897,13 @@ * * @return array List of contact IDs per-source */ @@ -882,25 +989,107 @@ $source = (string) rcube_utils::get_input_value('_source', rcube_utils::INPUT_GPC); if (is_array($cid)) { +diff -ur roundcubemail-1.1.orig/program/steps/addressbook/photo.inc roundcubemail-1.1/program/steps/addressbook/photo.inc +--- roundcubemail-1.1.orig/program/steps/addressbook/photo.inc 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/steps/addressbook/photo.inc 2014-11-14 14:07:29.194969467 +0100 +@@ -90,6 +90,12 @@ + $RCMAIL->output->future_expire_header(86400); + } + +-header('Content-Type: ' . rcube_mime::image_content_type($data)); +-echo $data ? $data : file_get_contents('program/resources/blank.gif'); ++if ($data) { ++ header('Content-Type: ' . rcube_mime::image_content_type($data)); ++ echo $data; ++} ++else { ++ header('Content-Type: image/gif'); ++ echo base64_decode(rcmail_output::BLANK_GIF); ++} + exit; +diff -ur roundcubemail-1.1.orig/program/steps/mail/compose.inc roundcubemail-1.1/program/steps/mail/compose.inc +--- roundcubemail-1.1.orig/program/steps/mail/compose.inc 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/steps/mail/compose.inc 2014-11-14 14:07:29.195969468 +0100 +@@ -949,7 +949,7 @@ + "googie.setCurrentLanguage('%s');\n". + "googie.setDecoration(false);\n". + "googie.decorateTextarea('%s');\n", +- $RCMAIL->output->get_skin_path(), ++ $RCMAIL->output->asset_url($RCMAIL->output->get_skin_path()), + $RCMAIL->url(array('_task' => 'utils', '_action' => 'spell', '_remote' => 1)), + !empty($dictionary) ? 'true' : 'false', + rcube::JQ(rcube::Q($RCMAIL->gettext('checkspelling'))), diff -ur roundcubemail-1.1.orig/program/steps/mail/show.inc roundcubemail-1.1/program/steps/mail/show.inc ---- roundcubemail-1.1.orig/program/steps/mail/show.inc 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/steps/mail/show.inc 2014-11-05 12:46:36.184520548 +0100 -@@ -351,10 +351,10 @@ - '_alt' => $placeholder, +--- roundcubemail-1.1.orig/program/steps/mail/show.inc 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/steps/mail/show.inc 2014-11-14 14:07:29.195969468 +0100 +@@ -341,20 +341,20 @@ + { + global $RCMAIL, $MESSAGE; + +- $placeholder = $attrib['placeholder'] ? $RCMAIL->config->get('skin_path') . $attrib['placeholder'] : null; ++ $placeholder = $attrib['placeholder'] ? $RCMAIL->output->abs_url($attrib['placeholder'], true) : null; ++ $placeholder = $RCMAIL->output->asset_url($placeholder ? $placeholder : 'program/resources/blank.gif'); + + if ($MESSAGE->sender) { + $photo_img = $RCMAIL->url(array( + '_task' => 'addressbook', + '_action' => 'photo', + '_email' => $MESSAGE->sender['mailto'], +- '_alt' => $placeholder, )); - $attrib['onerror'] = "this.src = '" . ($placeholder ? $placeholder : 'program/resources/blank.gif') . "'"; -+ $attrib['onerror'] = "this.src = '" . $RCMAIL->output->asset_url(($placeholder ? $placeholder : 'program/resources/blank.gif')) . "'"; ++ $attrib['onerror'] = "this.src = '$placeholder'"; } else { - $photo_img = $placeholder ? $placeholder : 'program/resources/blank.gif'; -+ $photo_img = ($placeholder ? $placeholder : $RCMAIL->output->asset_url('program/resources/blank.gif')); ++ $photo_img = $placeholder; } return html::img(array('src' => $photo_img, 'alt' => $RCMAIL->gettext('contactphoto')) + $attrib); +diff -ur roundcubemail-1.1.orig/program/steps/settings/func.inc roundcubemail-1.1/program/steps/settings/func.inc +--- roundcubemail-1.1.orig/program/steps/settings/func.inc 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/steps/settings/func.inc 2014-11-14 14:07:29.196969469 +0100 +@@ -334,13 +334,10 @@ + $input = new html_radiobutton(array('name'=>'_skin')); + + foreach ($skins as $skin) { +- $thumbnail = "./skins/$skin/thumbnail.png"; +- if (!is_file($thumbnail)) +- $thumbnail = './program/resources/blank.gif'; +- ++ $thumbnail = "skins/$skin/thumbnail.png"; + $skinname = ucfirst($skin); + $author_link = $license_link = ''; +- $meta = @json_decode(@file_get_contents("./skins/$skin/meta.json"), true); ++ $meta = @json_decode(@file_get_contents(INSTALL_PATH . "skins/$skin/meta.json"), true); + + if (is_array($meta) && $meta['name']) { + $skinname = $meta['name']; +@@ -348,10 +345,19 @@ + $license_link = $meta['license-url'] ? html::a(array('href' => $meta['license-url'], 'target' => '_blank', 'tabindex' => '-1'), rcube::Q($meta['license'])) : rcube::Q($meta['license']); + } + ++ $img = html::img(array( ++ 'src' => $thumbnail, ++ 'class' => 'skinthumbnail', ++ 'alt' => $skin, ++ 'width' => 64, ++ 'height' => 64, ++ 'onerror' => "this.src = rcmail.assets_path('program/resources/blank.gif')", ++ )); ++ + $skinnames[] = mb_strtolower($skinname); + $blocks['skin']['options'][$skin]['content'] = html::label(array('class' => 'skinselection'), + html::span('skinitem', $input->show($config['skin'], array('value' => $skin, 'id' => $field_id.$skin))) . +- html::span('skinitem', html::img(array('src' => $thumbnail, 'class' => 'skinthumbnail', 'alt' => $skin, 'width' => 64, 'height' => 64))) . ++ html::span('skinitem', $img) . + html::span('skinitem', html::span('skinname', rcube::Q($skinname)) . html::br() . + html::span('skinauthor', $author_link ? 'by ' . $author_link : '') . html::br() . + html::span('skinlicense', $license_link ? $RCMAIL->gettext('license').': ' . $license_link : '')) diff -ur roundcubemail-1.1.orig/program/steps/utils/error.inc roundcubemail-1.1/program/steps/utils/error.inc ---- roundcubemail-1.1.orig/program/steps/utils/error.inc 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/steps/utils/error.inc 2014-11-05 12:46:36.185520549 +0100 +--- roundcubemail-1.1.orig/program/steps/utils/error.inc 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/program/steps/utils/error.inc 2014-11-14 14:07:29.197969470 +0100 @@ -50,9 +50,17 @@ // forbidden due to request check @@ -921,3 +1110,250 @@ } // failed request (wrong step in URL) +diff -ur roundcubemail-1.1.orig/public_html/.htaccess roundcubemail-1.1/public_html/.htaccess +--- roundcubemail-1.1.orig/public_html/.htaccess 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/public_html/.htaccess 2014-11-14 14:07:29.183969452 +0100 +@@ -30,7 +30,7 @@ + # security rules: + # - deny access to files not containing a dot or starting with a dot + # in all locations except installer directory +-RewriteRule ^(?!installer)(\.?[^\.]+)$ - [F] ++RewriteRule ^(?!installer|[a-f0-9]{16})(\.?[^\.]+)$ - [F] + # - deny access to some locations + RewriteRule ^/?(\.git|\.tx|SQL|bin|config|logs|temp|tests|program\/(include|lib|localization|steps)) - [F] + # - deny access to some documentation files +diff -ur roundcubemail-1.1.orig/public_html/plugins/acl/acl.js roundcubemail-1.1/public_html/plugins/acl/acl.js +--- roundcubemail-1.1.orig/public_html/plugins/acl/acl.js 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/public_html/plugins/acl/acl.js 2014-11-14 14:07:29.185969454 +0100 +@@ -58,8 +58,11 @@ + var users = this.acl_get_usernames(); + + if (users && users.length && confirm(this.get_label('acl.deleteconfirm'))) { +- this.http_request('settings/plugin.acl', '_act=delete&_user='+urlencode(users.join(',')) +- + '&_mbox='+urlencode(this.env.mailbox), ++ this.http_post('settings/plugin.acl', { ++ _act: 'delete', ++ _user: users.join(','), ++ _mbox: this.env.mailbox ++ }, + this.set_busy(true, 'acl.deleting')); + } + } +@@ -67,7 +70,7 @@ + // Save ACL data + rcube_webmail.prototype.acl_save = function() + { +- var user = $('#acluser', this.acl_form).val(), rights = '', type; ++ var data, type, rights = '', user = $('#acluser', this.acl_form).val(); + + $((this.env.acl_advanced ? '#advancedrights :checkbox' : '#simplerights :checkbox'), this.acl_form).map(function() { + if (this.checked) +@@ -88,12 +91,18 @@ + return; + } + +- this.http_request('settings/plugin.acl', '_act=save' +- + '&_user='+urlencode(user) +- + '&_acl=' +rights +- + '&_mbox='+urlencode(this.env.mailbox) +- + (this.acl_id ? '&_old='+this.acl_id : ''), +- this.set_busy(true, 'acl.saving')); ++ data = { ++ _act: 'save', ++ _user: user, ++ _acl: rights, ++ _mbox: this.env.mailbox ++ } ++ ++ if (this.acl_id) { ++ data._old = this.acl_id; ++ } ++ ++ this.http_post('settings/plugin.acl', data, this.set_busy(true, 'acl.saving')); + } + + // Cancel/Hide form +diff -ur roundcubemail-1.1.orig/public_html/plugins/acl/acl.php roundcubemail-1.1/public_html/plugins/acl/acl.php +--- roundcubemail-1.1.orig/public_html/plugins/acl/acl.php 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/public_html/plugins/acl/acl.php 2014-11-14 14:07:29.185969454 +0100 +@@ -454,10 +454,10 @@ + */ + private function action_save() + { +- $mbox = trim(rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_GPC, true)); // UTF7-IMAP +- $user = trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_GPC)); +- $acl = trim(rcube_utils::get_input_value('_acl', rcube_utils::INPUT_GPC)); +- $oldid = trim(rcube_utils::get_input_value('_old', rcube_utils::INPUT_GPC)); ++ $mbox = trim(rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST, true)); // UTF7-IMAP ++ $user = trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST)); ++ $acl = trim(rcube_utils::get_input_value('_acl', rcube_utils::INPUT_POST)); ++ $oldid = trim(rcube_utils::get_input_value('_old', rcube_utils::INPUT_POST)); + + $acl = array_intersect(str_split($acl), $this->rights_supported()); + $users = $oldid ? array($user) : explode(',', $user); +@@ -510,8 +510,8 @@ + */ + private function action_delete() + { +- $mbox = trim(rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_GPC, true)); //UTF7-IMAP +- $user = trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_GPC)); ++ $mbox = trim(rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST, true)); //UTF7-IMAP ++ $user = trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST)); + + $user = explode(',', $user); + +diff -ur roundcubemail-1.1.orig/public_html/plugins/legacy_browser/js/iehacks.js roundcubemail-1.1/public_html/plugins/legacy_browser/js/iehacks.js +--- roundcubemail-1.1.orig/public_html/plugins/legacy_browser/js/iehacks.js 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/public_html/plugins/legacy_browser/js/iehacks.js 2014-11-14 14:07:29.185969454 +0100 +@@ -102,7 +102,7 @@ + rcube_webmail.prototype.async_upload_form_frame = function(name) + { + document.body.insertAdjacentHTML('BeforeEnd', '<iframe name="' + name + '"' +- + ' src="program/resources/blank.gif" style="width:0; height:0; visibility:hidden"></iframe>'); ++ + ' src="' + rcmail.assets_path('program/resources/blank.gif') + '" style="width:0; height:0; visibility:hidden"></iframe>'); + + return $('iframe[name="' + name + '"]'); + }; +diff -ur roundcubemail-1.1.orig/public_html/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php roundcubemail-1.1/public_html/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php +--- roundcubemail-1.1.orig/public_html/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/public_html/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php 2014-11-14 14:07:29.186969456 +0100 +@@ -349,7 +349,7 @@ + } + } + else if ($action == 'setact' && !$error) { +- $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_GPC, true); ++ $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_POST, true); + $result = $this->activate_script($script_name); + $kep14 = $this->rc->config->get('managesieve_kolab_master'); + +@@ -363,7 +363,7 @@ + } + } + else if ($action == 'deact' && !$error) { +- $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_GPC, true); ++ $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_POST, true); + $result = $this->deactivate_script($script_name); + + if ($result === true) { +@@ -376,7 +376,7 @@ + } + } + else if ($action == 'setdel' && !$error) { +- $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_GPC, true); ++ $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_POST, true); + $result = $this->remove_script($script_name); + + if ($result === true) { +@@ -419,14 +419,14 @@ + $this->rc->output->command('managesieve_updatelist', 'list', array('list' => $result)); + } + else if ($action == 'ruleadd') { +- $rid = rcube_utils::get_input_value('_rid', rcube_utils::INPUT_GPC); ++ $rid = rcube_utils::get_input_value('_rid', rcube_utils::INPUT_POST); + $id = $this->genid(); + $content = $this->rule_div($fid, $id, false); + + $this->rc->output->command('managesieve_rulefill', $content, $id, $rid); + } + else if ($action == 'actionadd') { +- $aid = rcube_utils::get_input_value('_aid', rcube_utils::INPUT_GPC); ++ $aid = rcube_utils::get_input_value('_aid', rcube_utils::INPUT_POST); + $id = $this->genid(); + $content = $this->action_div($fid, $id, false); + +diff -ur roundcubemail-1.1.orig/public_html/program/js/app.js roundcubemail-1.1/public_html/program/js/app.js +--- roundcubemail-1.1.orig/public_html/program/js/app.js 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/public_html/program/js/app.js 2014-11-14 14:07:29.191969462 +0100 +@@ -58,7 +58,6 @@ + request_timeout: 180, // seconds + draft_autosave: 0, // seconds + comm_path: './', +- blankpage: 'program/resources/blank.gif', + recipients_separator: ',', + recipients_delimiter: ', ', + popup_width: 1150, +@@ -163,6 +162,9 @@ + return; + } + ++ if (!this.env.blankpage) ++ this.env.blankpage = this.assets_path('program/resources/blank.gif'); ++ + // find all registered gui containers + for (n in this.gui_containers) + this.gui_containers[n] = $('#'+this.gui_containers[n]); +@@ -1405,8 +1407,10 @@ + + if (task == 'mail') + url += '&_mbox=INBOX'; +- else if (task == 'logout' && !this.env.server_error) ++ else if (task == 'logout' && !this.env.server_error) { ++ url += '&_token=' + this.env.request_token; + this.clear_compose_data(); ++ } + + this.redirect(url); + }; +@@ -1416,7 +1420,10 @@ + if (!url) + url = this.env.comm_path; + +- return url.replace(/_task=[a-z0-9_-]+/i, '_task='+task); ++ if (url.match(/[?&]_task=[a-zA-Z0-9_-]+/)) ++ return url.replace(/_task=[a-zA-Z0-9_-]+/, '_task=' + task); ++ else ++ return url.replace(/\?.*$/, '') + '?_task=' + task; + }; + + this.reload = function(delay) +@@ -7982,7 +7989,7 @@ + + img.onload = function() { ref.env.browser_capabilities.tif = 1; }; + img.onerror = function() { ref.env.browser_capabilities.tif = 0; }; +- img.src = 'program/resources/blank.tif'; ++ img.src = this.assets_path('program/resources/blank.tif'); + }; + + this.pdf_support_check = function() +@@ -8039,6 +8046,15 @@ + return 0; + }; + ++ this.assets_path = function(path) ++ { ++ if (this.env.assets_path && !path.startsWith(this.env.assets_path)) { ++ path = this.env.assets_path + path; ++ } ++ ++ return path; ++ }; ++ + // Cookie setter + this.set_cookie = function(name, value, expires) + { +diff -ur roundcubemail-1.1.orig/public_html/program/js/editor.js roundcubemail-1.1/public_html/program/js/editor.js +--- roundcubemail-1.1.orig/public_html/program/js/editor.js 2014-11-10 17:12:45.000000000 +0100 ++++ roundcubemail-1.1/public_html/program/js/editor.js 2014-11-14 14:07:29.192969463 +0100 +@@ -36,11 +36,12 @@ + function rcube_text_editor(config, id) + { + var ref = this, ++ abs_url = location.href.replace(/[?#].*$/, '').replace(/\/$/, ''), + conf = { + selector: '#' + ($('#' + id).is('.mce_editor') ? id : 'fake-editor-id'), + theme: 'modern', + language: config.lang, +- content_css: 'program/js/tinymce/roundcube/content.css?v2', ++ content_css: rcmail.assets_path('program/js/tinymce/roundcube/content.css?v2'), + menubar: false, + statusbar: false, + toolbar_items_size: 'small', +@@ -82,7 +83,7 @@ + toolbar: 'bold italic underline | alignleft aligncenter alignright alignjustify' + + ' | bullist numlist outdent indent ltr rtl blockquote | forecolor backcolor | fontselect fontsizeselect' + + ' | link unlink table | emoticons charmap image media | code searchreplace undo redo', +- spellchecker_rpc_url: '../../../../../?_task=utils&_action=spell_html&_remote=1', ++ spellchecker_rpc_url: abs_url + '/?_task=utils&_action=spell_html&_remote=1', + spellchecker_language: rcmail.env.spell_lang, + accessibility_focus: false, + file_browser_callback: function(name, url, type, win) { ref.file_browser_callback(name, url, type); },
View file
roundcubemail-1.1-csrf.patch
Changed
@@ -1,7 +1,21 @@ -diff -ur roundcubemail-1.1.orig/config/defaults.inc.php roundcubemail-1.1/config/defaults.inc.php ---- roundcubemail-1.1.orig/config/defaults.inc.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/config/defaults.inc.php 2014-11-05 13:58:01.126092293 +0100 -@@ -532,6 +532,23 @@ +diff --git a/.htaccess b/.htaccess +index a9cc5c3..32c47f0 100644 +--- a/.htaccess ++++ b/.htaccess +@@ -30,7 +30,7 @@ RewriteRule ^favicon\.ico$ skins/larry/images/favicon.ico + # security rules: + # - deny access to files not containing a dot or starting with a dot + # in all locations except installer directory +-RewriteRule ^(?!installer)(\.?[^\.]+)$ - [F] ++RewriteRule ^(?!installer|[a-f0-9]{16})(\.?[^\.]+)$ - [F] + # - deny access to some locations + RewriteRule ^/?(\.git|\.tx|SQL|bin|config|logs|temp|tests|program\/(include|lib|localization|steps)) - [F] + # - deny access to some documentation files +diff --git a/config/defaults.inc.php b/config/defaults.inc.php +index ee836e6..9d04b6e 100644 +--- a/config/defaults.inc.php ++++ b/config/defaults.inc.php +@@ -532,6 +532,28 @@ $config['email_dns_check'] = false; // Note: useful when SMTP server stores sent mail in user mailbox $config['no_save_sent_messages'] = false; @@ -22,25 +36,19 @@ +// </FilesMatch> +$config['assets_path'] = '/roundcubemail/assets/'; + ++// While assets_path is for the browser, assets_dir informs ++// PHP code about the location of asset files in filesystem ++$config['assets_dir'] = '/usr/share/roundcubemail/public_html/assets/'; ++ ++ // ---------------------------------- // PLUGINS // ---------------------------------- -diff -ur roundcubemail-1.1.orig/.htaccess roundcubemail-1.1/.htaccess ---- roundcubemail-1.1.orig/.htaccess 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/.htaccess 2014-11-05 13:58:01.121092288 +0100 -@@ -30,7 +30,7 @@ - # security rules: - # - deny access to files not containing a dot or starting with a dot - # in all locations except installer directory --RewriteRule ^(?!installer)(\.?[^\.]+)$ - [F] -+RewriteRule ^(?!installer|[a-f0-9]{16})(\.?[^\.]+)$ - [F] - # - deny access to some locations - RewriteRule ^/?(\.git|\.tx|SQL|bin|config|logs|temp|tests|program\/(include|lib|localization|steps)) - [F] - # - deny access to some documentation files -diff -ur roundcubemail-1.1.orig/index.php roundcubemail-1.1/index.php ---- roundcubemail-1.1.orig/index.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/index.php 2014-11-05 13:58:01.121092288 +0100 -@@ -90,9 +90,9 @@ +diff --git a/index.php b/index.php +index 5ca2af6..e19d81a 100644 +--- a/index.php ++++ b/index.php +@@ -90,9 +90,9 @@ $RCMAIL->action = $startup['action']; // try to log in if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') { @@ -52,7 +60,7 @@ $RCMAIL->kill_session(); $auth = $RCMAIL->plugins->exec_hook('authenticate', array( -@@ -140,7 +140,7 @@ +@@ -140,7 +140,7 @@ if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') { unset($redir['abort'], $redir['_err']); // send redirect @@ -61,7 +69,7 @@ } else { if (!$auth['valid']) { -@@ -171,10 +171,10 @@ +@@ -171,10 +171,10 @@ if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') { } } @@ -76,7 +84,7 @@ $userdata = array( 'user' => $_SESSION['username'], 'host' => $_SESSION['storage_host'], -@@ -234,32 +234,9 @@ +@@ -234,32 +234,9 @@ if (empty($RCMAIL->user->ID)) { $OUTPUT->send($plugin['task']); } @@ -111,10 +119,11 @@ // check access to disabled actions $disabled_actions = (array) $RCMAIL->config->get('disabled_actions'); -diff -ur roundcubemail-1.1.orig/plugins/acl/acl.js roundcubemail-1.1/plugins/acl/acl.js ---- roundcubemail-1.1.orig/plugins/acl/acl.js 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/plugins/acl/acl.js 2014-11-05 13:58:01.121092288 +0100 -@@ -58,8 +58,11 @@ +diff --git a/plugins/acl/acl.js b/plugins/acl/acl.js +index e59ac72..1463453 100644 +--- a/plugins/acl/acl.js ++++ b/plugins/acl/acl.js +@@ -58,8 +58,11 @@ rcube_webmail.prototype.acl_delete = function() var users = this.acl_get_usernames(); if (users && users.length && confirm(this.get_label('acl.deleteconfirm'))) { @@ -128,7 +137,7 @@ this.set_busy(true, 'acl.deleting')); } } -@@ -67,7 +70,7 @@ +@@ -67,7 +70,7 @@ rcube_webmail.prototype.acl_delete = function() // Save ACL data rcube_webmail.prototype.acl_save = function() { @@ -137,7 +146,7 @@ $((this.env.acl_advanced ? '#advancedrights :checkbox' : '#simplerights :checkbox'), this.acl_form).map(function() { if (this.checked) -@@ -88,12 +91,18 @@ +@@ -88,12 +91,18 @@ rcube_webmail.prototype.acl_save = function() return; } @@ -162,10 +171,11 @@ } // Cancel/Hide form -diff -ur roundcubemail-1.1.orig/plugins/acl/acl.php roundcubemail-1.1/plugins/acl/acl.php ---- roundcubemail-1.1.orig/plugins/acl/acl.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/plugins/acl/acl.php 2014-11-05 13:58:01.121092288 +0100 -@@ -454,10 +454,10 @@ +diff --git a/plugins/acl/acl.php b/plugins/acl/acl.php +index 349f7e5..35a92bb 100644 +--- a/plugins/acl/acl.php ++++ b/plugins/acl/acl.php +@@ -454,10 +454,10 @@ class acl extends rcube_plugin */ private function action_save() { @@ -180,7 +190,7 @@ $acl = array_intersect(str_split($acl), $this->rights_supported()); $users = $oldid ? array($user) : explode(',', $user); -@@ -510,8 +510,8 @@ +@@ -510,8 +510,8 @@ class acl extends rcube_plugin */ private function action_delete() { @@ -191,10 +201,24 @@ $user = explode(',', $user); -diff -ur roundcubemail-1.1.orig/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php roundcubemail-1.1/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php ---- roundcubemail-1.1.orig/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php 2014-11-05 13:58:01.122092289 +0100 -@@ -349,7 +349,7 @@ +diff --git a/plugins/legacy_browser/js/iehacks.js b/plugins/legacy_browser/js/iehacks.js +index 8f88e6f..105b7da 100644 +--- a/plugins/legacy_browser/js/iehacks.js ++++ b/plugins/legacy_browser/js/iehacks.js +@@ -102,7 +102,7 @@ rcube_webmail.prototype.get_input_selection = function(obj) + rcube_webmail.prototype.async_upload_form_frame = function(name) + { + document.body.insertAdjacentHTML('BeforeEnd', '<iframe name="' + name + '"' +- + ' src="program/resources/blank.gif" style="width:0; height:0; visibility:hidden"></iframe>'); ++ + ' src="' + rcmail.assets_path('program/resources/blank.gif') + '" style="width:0; height:0; visibility:hidden"></iframe>'); + + return $('iframe[name="' + name + '"]'); + }; +diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php +index fb2f64e..0df31b8 100644 +--- a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php ++++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php +@@ -349,7 +349,7 @@ class rcube_sieve_engine } } else if ($action == 'setact' && !$error) { @@ -203,7 +227,7 @@ $result = $this->activate_script($script_name); $kep14 = $this->rc->config->get('managesieve_kolab_master'); -@@ -363,7 +363,7 @@ +@@ -363,7 +363,7 @@ class rcube_sieve_engine } } else if ($action == 'deact' && !$error) { @@ -212,7 +236,7 @@ $result = $this->deactivate_script($script_name); if ($result === true) { -@@ -376,7 +376,7 @@ +@@ -376,7 +376,7 @@ class rcube_sieve_engine } } else if ($action == 'setdel' && !$error) { @@ -221,7 +245,7 @@ $result = $this->remove_script($script_name); if ($result === true) { -@@ -419,14 +419,14 @@ +@@ -419,14 +419,14 @@ class rcube_sieve_engine $this->rc->output->command('managesieve_updatelist', 'list', array('list' => $result)); } else if ($action == 'ruleadd') { @@ -238,27 +262,159 @@ $id = $this->genid(); $content = $this->action_div($fid, $id, false); -diff -ur roundcubemail-1.1.orig/program/include/rcmail_output_html.php roundcubemail-1.1/program/include/rcmail_output_html.php ---- roundcubemail-1.1.orig/program/include/rcmail_output_html.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/include/rcmail_output_html.php 2014-11-05 13:59:39.850176239 +0100 -@@ -45,6 +45,7 @@ +diff --git a/program/include/rcmail.php b/program/include/rcmail.php +index 8ea42b6..e59e7d4 100644 +--- a/program/include/rcmail.php ++++ b/program/include/rcmail.php +@@ -760,49 +760,16 @@ class rcmail extends rcube + } + + /** +- * Generate a unique token to be used in a form request +- * +- * @return string The request token +- */ +- public function get_request_token() +- { +- $sess_id = $_COOKIE[ini_get('session.name')]; +- +- if (!$sess_id) { +- $sess_id = session_id(); +- } +- +- $plugin = $this->plugins->exec_hook('request_token', array( +- 'value' => md5('RT' . $this->get_user_id() . $this->config->get('des_key') . $sess_id))); +- +- return $plugin['value']; +- } +- +- /** +- * Check if the current request contains a valid token +- * +- * @param int Request method +- * +- * @return boolean True if request token is valid false if not +- */ +- public function check_request($mode = rcube_utils::INPUT_POST) +- { +- $token = rcube_utils::get_input_value('_token', $mode); +- $sess_id = $_COOKIE[ini_get('session.name')]; +- +- return !empty($sess_id) && $token == $this->get_request_token(); +- } +- +- /** + * Build a valid URL to this instance of Roundcube + * + * @param mixed Either a string with the action or url parameters as key-value pairs + * @param boolean Build an URL absolute to document root + * @param boolean Create fully qualified URL including http(s):// and hostname ++ * @param bool Return absolute URL in secure location + * + * @return string Valid application URL + */ +- public function url($p, $absolute = false, $full = false) ++ public function url($p, $absolute = false, $full = false, $secure = false) + { + if (!is_array($p)) { + if (strpos($p, 'http') === 0) { +@@ -828,9 +795,23 @@ class rcmail extends rcube + } + } + ++ $base_path = strval($_SERVER['REDIRECT_SCRIPT_URL'] ?: $_SERVER['SCRIPT_NAME']); ++ $base_path = preg_replace('![^/]+$!', '', $base_path); ++ ++ if ($secure && ($token = $this->get_secure_url_token(true))) { ++ // add token to the url ++ $url = $token . '/' . $url; ++ ++ // remove old token from the path ++ $base_path = rtrim($base_path, '/'); ++ $base_path = preg_replace('/\/[a-f0-9]{' . strlen($token) . '}$/', '', $base_path); ++ ++ // this need to be full url to make redirects work ++ $absolute = true; ++ } ++ + if ($absolute || $full) { + // add base path to this Roundcube installation +- $base_path = preg_replace('![^/]+$!', '', strval($_SERVER['SCRIPT_NAME'])); + if ($base_path == '') $base_path = '/'; + $prefix = $base_path; + +@@ -880,6 +861,36 @@ class rcmail extends rcube + } + + /** ++ * CSRF attack prevention code ++ * ++ * @param int Request mode ++ */ ++ public function request_security_check($mode = rcube_utils::INPUT_POST) ++ { ++ // don't check for valid request tokens in these actions ++ // @TODO: get rid of this ++ $request_check_whitelist = array('spell'=>1, 'spell_html'=>1); ++ ++ if ($request_check_whitelist[$this->action]) { ++ return; ++ } ++ ++ // check request token ++ if (!$this->check_request($mode)) { ++ self::raise_error(array( ++ 'code' => 403, 'type' => 'php', ++ 'message' => "Request security check failed"), false, true); ++ } ++ ++ // check referer if configured ++ if ($this->config->get('referer_check') && !rcube_utils::check_referer()) { ++ self::raise_error(array( ++ 'code' => 403, 'type' => 'php', ++ 'message' => "Referer check failed"), true, true); ++ } ++ } ++ ++ /** + * Registers action aliases for current task + * + * @param array $map Alias-to-filename hash array +diff --git a/program/include/rcmail_output.php b/program/include/rcmail_output.php +index 0f7aaf9..76ff4e7 100644 +--- a/program/include/rcmail_output.php ++++ b/program/include/rcmail_output.php +@@ -28,6 +28,7 @@ + abstract class rcmail_output extends rcube_output + { + const JS_OBJECT_NAME = 'rcmail'; ++ const BLANK_GIF = 'R0lGODlhDwAPAIAAAMDAwAAAACH5BAEAAAAALAAAAAAPAA8AQAINhI+py+0Po5y02otnAQA7'; + + public $type = 'html'; + public $ajax_call = false; +diff --git a/program/include/rcmail_output_html.php b/program/include/rcmail_output_html.php +index 026e9f8..c6c43b5 100644 +--- a/program/include/rcmail_output_html.php ++++ b/program/include/rcmail_output_html.php +@@ -45,6 +45,8 @@ class rcmail_output_html extends rcmail_output protected $footer = ''; protected $body = ''; protected $base_path = ''; + protected $assets_path; ++ protected $assets_dir = RCUBE_INSTALL_PATH; protected $devel_mode = false; // deprecated names of templates used before 0.5 -@@ -80,6 +81,8 @@ +@@ -80,6 +82,8 @@ class rcmail_output_html extends rcmail_output $this->set_skin($skin); $this->set_env('skin', $skin); -+ $this->set_assets_path($this->config->get('assets_path')); ++ $this->set_assets_path($this->config->get('assets_path'), $this->config->get('assets_dir')); + if (!empty($_REQUEST['_extwin'])) $this->set_env('extwin', 1); if ($this->framed || $framed) -@@ -145,6 +148,52 @@ +@@ -145,6 +149,55 @@ EOF; } /** @@ -266,7 +422,7 @@ + * + * @param string Assets path (relative or absolute URL) + */ -+ public function set_assets_path($path) ++ public function set_assets_path($path, $fs_dir = null) + { + if (empty($path)) { + return; @@ -274,33 +430,36 @@ + + $path = rtrim($path, '/') . '/'; + -+ // convert to absolute URL -+ if (!preg_match('|^https?://|', $path)) { -+ if ($path[0] != '/') { -+ $base = preg_replace('/[?#&].*$/', '', $_SERVER['REQUEST_URI']); -+ $base = rtrim($base, '/'); -+ } ++ // handle relative assets path ++ if (!preg_match('|^https?://|', $path) && $path[0] != '/') { ++ // save the path to search for asset files later ++ $this->assets_dir = $path; ++ ++ $base = preg_replace('/[?#&].*$/', '', $_SERVER['REQUEST_URI']); ++ $base = rtrim($base, '/'); + + // remove url token if exists + if ($len = intval($this->config->get('use_secure_urls'))) { + $_base = explode('/', $base); ++ $last = count($_base) - 1; + $length = $len > 1 ? $len : 16; // as in rcube::get_secure_url_token() + + // we can't use real token here because it + // does not exists in unauthenticated state, + // hope this will not produce false-positive matches -+ foreach ($_base as $idx => $token) { -+ if (preg_match('/^[a-f0-9]{' . $length . '}$/', $token)) { -+ unset($_base[$idx]); -+ break; -+ } ++ if ($last > -1 && preg_match('/^[a-f0-9]{' . $length . '}$/', $_base[$last])) { ++ $path = '../' . $path; + } -+ -+ $base = implode('/', $_base); + } ++ } + -+ $path = (rcube_utils::https_check() ? 'https' : 'http') . '://' -+ . $_SERVER['SERVER_NAME'] . (!empty($base) ? rtrim($base, '/') . '/' : '/') . ltrim($path, '/');; ++ // set filesystem path for assets ++ if ($fs_dir) { ++ if ($fs_dir[0] != '/') { ++ $fs_dir = realpath(RCUBE_INSTALL_PATH . $fs_dir); ++ } ++ // ensure the path ends with a slash ++ $this->assets_dir = rtrim($fs_dir, '/') . '/'; + } + + $this->assets_path = $path; @@ -311,36 +470,37 @@ * Getter for the current page title * * @return string The page title -@@ -261,10 +310,27 @@ +@@ -251,6 +304,7 @@ EOF; + * @param string File name/path to resolve (starting with /) + * @param string Reference to the base path of the matching skin + * @param string Additional path to search in ++ * + * @return mixed Relative path to the requested file or False if not found + */ + public function get_skin_file($file, &$skin_path = null, $add_path = null) +@@ -261,10 +315,19 @@ EOF; } foreach ($skin_paths as $skin_path) { - $path = realpath($skin_path . $file); -+ $path = $skin_path . $file; -+ -+ if (is_file($path)) { -+ return $skin_path . $file; -+ } +- if (is_file($path)) { ++ $path = realpath(RCUBE_INSTALL_PATH . $skin_path . $file); + -+ $path = rtrim(RCUBE_INSTALL_PATH, '/'); -+ $path .= '/' . 'public_html/assets/'; -+ $path .= rtrim($skin_path, '/') . '/' . $file; -+ - if (is_file($path)) { ++ if ($path && is_file($path)) { return $skin_path . $file; } + -+ $path = rtrim(RCUBE_INSTALL_PATH, '/'); -+ $path .= '/' . $skin_path . $file; -+ $path = realpath($path); ++ if ($this->assets_dir != RCUBE_INSTALL_PATH) { ++ $path = realpath($this->assets_dir . $skin_path . $file); + -+ if ($skin_path[0] != '/' && is_file($path)) { -+ return $path; ++ if ($path && is_file($path)) { ++ return $skin_path . $file; ++ } + } } return false; -@@ -369,14 +435,15 @@ +@@ -369,14 +432,15 @@ EOF; /** * Redirect to a certain url * @@ -360,31 +520,21 @@ header('Location: ' . $location); exit; } -@@ -494,9 +561,10 @@ +@@ -490,11 +554,11 @@ EOF; + // find skin template + $path = false; + foreach ($this->skin_paths as $skin_path) { +- $path = "$skin_path/templates/$name.html"; ++ $path = RCUBE_INSTALL_PATH . "$skin_path/templates/$name.html"; // fallback to deprecated template names if (!is_readable($path) && $this->deprecated_templates[$realname]) { - $path = "$skin_path/templates/" . $this->deprecated_templates[$realname] . ".html"; -+ // Try an old path -+ $tpath = "$skin_path/templates/" . $this->deprecated_templates[$realname] . ".html"; ++ $path = RCUBE_INSTALL_PATH . "$skin_path/templates/" . $this->deprecated_templates[$realname] . ".html"; -- if (is_readable($path)) { -+ if (is_readable($tpath)) { + if (is_readable($path)) { rcube::raise_error(array( - 'code' => 502, 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, -@@ -506,6 +574,10 @@ - } - } - -+ if (!is_readable($path) && $path[0] != '/' && is_readable(rtrim(RCUBE_INSTALL_PATH, '/') . '/' . $path)) { -+ $path = rtrim(RCUBE_INSTALL_PATH, '/') . '/' . $path; -+ } -+ - if (is_readable($path)) { - $this->config->set('skin_path', $skin_path); - $this->base_path = preg_replace('!plugins/\w+/!', '', $skin_path); // set base_path to core skin directory (not plugin's skin) -@@ -667,6 +739,24 @@ +@@ -667,6 +731,21 @@ EOF; exit; } @@ -395,12 +545,9 @@ + { + // iframe content can't be in a different domain + // @TODO: check if assests are on a different domain -+ if (!$this->assets_path || $path == $this->env['blankpage']) { -+ return $path; -+ } + -+ if ($path[0] == '.' && $path[1] == '/') { -+ $path = substr($path, 2); ++ if (!$this->assets_path || in_array($path[0], array('?', '/', '.')) || strpos($path, '://')) { ++ return $path; + } + + return $this->assets_path . $path; @@ -409,33 +556,95 @@ /***** Template parsing methods *****/ -@@ -723,6 +813,8 @@ - $file = $this->file_mod($file); - } +@@ -704,7 +783,7 @@ EOF; + } -+ $file = $this->asset_url($file); -+ - return $matches[1] . '=' . $matches[2] . $file . $matches[4]; + /** +- * Callback function for preg_replace_callback in write() ++ * Callback function for preg_replace_callback in fix_paths() + * + * @return string Parsed string + */ +@@ -727,6 +806,28 @@ EOF; } -@@ -1337,6 +1429,7 @@ - { - if (!preg_match('|^https?://|i', $file) && $file[0] != '/') { - $file = $this->file_mod($this->scripts_path . $file); -+ $file = $this->asset_url($file); + /** ++ * Correct paths of asset files according to assets_path ++ */ ++ protected function fix_assets_paths($output) ++ { ++ return preg_replace_callback( ++ '!(src|href|background)=(["\']?)([a-z0-9/_.?=-]+)(["\'\s>])!i', ++ array($this, 'assets_callback'), $output); ++ } ++ ++ /** ++ * Callback function for preg_replace_callback in fix_assets_paths() ++ * ++ * @return string Parsed string ++ */ ++ protected function assets_callback($matches) ++ { ++ $file = $this->asset_url($matches[3]); ++ ++ return $matches[1] . '=' . $matches[2] . $file . $matches[4]; ++ } ++ ++ /** + * Modify file by adding mtime indicator + */ + protected function file_mod($file) +@@ -737,12 +838,12 @@ EOF; + // use minified file if exists (not in development mode) + if (!$this->devel_mode && !preg_match('/\.min\.' . $ext . '$/', $file)) { + $minified_file = substr($file, 0, strlen($ext) * -1) . 'min.' . $ext; +- if ($fs = @filemtime($minified_file)) { ++ if ($fs = @filemtime($this->assets_dir . $minified_file)) { + return $minified_file . '?s=' . $fs; + } + } + +- if ($fs = @filemtime($file)) { ++ if ($fs = @filemtime($this->assets_dir . $file)) { + $file .= '?s=' . $fs; } - if (!is_array($this->script_files[$position])) { -@@ -1549,7 +1642,7 @@ +@@ -969,7 +1070,7 @@ EOF; + if (!empty($attrib['skin_path'])) $attrib['skinpath'] = $attrib['skin_path']; + if ($path = $this->get_skin_file($attrib['file'], $skin_path, $attrib['skinpath'])) { + $this->base_path = preg_replace('!plugins/\w+/!', '', $skin_path); // set base_path to core skin directory (not plugin's skin) +- $path = realpath($path); ++ $path = realpath(RCUBE_INSTALL_PATH . $path); + } + + if (is_readable($path)) { +@@ -1521,6 +1622,10 @@ EOF; + + $output = $this->parse_with_globals($this->fix_paths($output)); + ++ if ($this->assets_path) { ++ $output = $this->fix_assets_paths($output); ++ } ++ + // trigger hook with final HTML content to be sent + $hook = $this->app->plugins->exec_hook("send_page", array('content' => $output)); + if (!$hook['abort']) { +@@ -1549,12 +1654,12 @@ EOF; } $attrib['name'] = $attrib['id']; - $attrib['src'] = $attrib['src'] ? $this->abs_url($attrib['src'], true) : 'program/resources/blank.gif'; -+ $attrib['src'] = $this->asset_url($attrib['src'] ? $this->abs_url($attrib['src'], true) : 'program/resources/blank.gif'); ++ $attrib['src'] = $attrib['src'] ? $this->abs_url($attrib['src'], true) : 'program/resources/blank.gif'; // register as 'contentframe' object if ($is_contentframe || $attrib['contentframe']) { -@@ -1766,9 +1859,11 @@ + $this->set_env('contentframe', $attrib['contentframe'] ? $attrib['contentframe'] : $attrib['name']); +- $this->set_env('blankpage', $attrib['src']); ++ $this->set_env('blankpage', $this->asset_url($attrib['src'])); + } + + return html::iframe($attrib); +@@ -1766,9 +1871,11 @@ EOF; { $images = preg_split('/[\s\t\n,]+/', $attrib['images'], -1, PREG_SPLIT_NO_EMPTY); $images = array_map(array($this, 'abs_url'), $images); @@ -448,10 +657,11 @@ $this->add_script('var images = ' . self::json_serialize($images) .'; for (var i=0; i<images.length; i++) { -diff -ur roundcubemail-1.1.orig/program/include/rcmail_output_json.php roundcubemail-1.1/program/include/rcmail_output_json.php ---- roundcubemail-1.1.orig/program/include/rcmail_output_json.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/include/rcmail_output_json.php 2014-11-05 13:58:01.122092289 +0100 -@@ -181,6 +181,11 @@ +diff --git a/program/include/rcmail_output_json.php b/program/include/rcmail_output_json.php +index fa35824..91262ac 100644 +--- a/program/include/rcmail_output_json.php ++++ b/program/include/rcmail_output_json.php +@@ -181,6 +181,11 @@ class rcmail_output_json extends rcmail_output */ public function raise_error($code, $message) { @@ -463,125 +673,11 @@ $this->show_message("Application Error ($code): $message", 'error'); $this->remote_response(); exit; -diff -ur roundcubemail-1.1.orig/program/include/rcmail.php roundcubemail-1.1/program/include/rcmail.php ---- roundcubemail-1.1.orig/program/include/rcmail.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/include/rcmail.php 2014-11-05 13:58:01.123092290 +0100 -@@ -760,49 +760,16 @@ - } - - /** -- * Generate a unique token to be used in a form request -- * -- * @return string The request token -- */ -- public function get_request_token() -- { -- $sess_id = $_COOKIE[ini_get('session.name')]; -- -- if (!$sess_id) { -- $sess_id = session_id(); -- } -- -- $plugin = $this->plugins->exec_hook('request_token', array( -- 'value' => md5('RT' . $this->get_user_id() . $this->config->get('des_key') . $sess_id))); -- -- return $plugin['value']; -- } -- -- /** -- * Check if the current request contains a valid token -- * -- * @param int Request method -- * -- * @return boolean True if request token is valid false if not -- */ -- public function check_request($mode = rcube_utils::INPUT_POST) -- { -- $token = rcube_utils::get_input_value('_token', $mode); -- $sess_id = $_COOKIE[ini_get('session.name')]; -- -- return !empty($sess_id) && $token == $this->get_request_token(); -- } -- -- /** - * Build a valid URL to this instance of Roundcube - * - * @param mixed Either a string with the action or url parameters as key-value pairs - * @param boolean Build an URL absolute to document root - * @param boolean Create fully qualified URL including http(s):// and hostname -+ * @param bool Return absolute URL in secure location - * - * @return string Valid application URL - */ -- public function url($p, $absolute = false, $full = false) -+ public function url($p, $absolute = false, $full = false, $secure = false) - { - if (!is_array($p)) { - if (strpos($p, 'http') === 0) { -@@ -828,9 +795,21 @@ - } - } - -+ $base_path = preg_replace('![^/]+$!', '', strval($_SERVER['SCRIPT_NAME'])); -+ -+ if ($secure && ($token = $this->get_secure_url_token(true))) { -+ // add token to the url -+ $url = $token . '/' . $url; -+ -+ // remove old token from the path -+ $base_path = preg_replace('/\/[a-f0-9]{' . strlen($token) . '}$/', '', $base_path); -+ -+ // this need to be full url to make redirects work -+ $absolute = true; -+ } -+ - if ($absolute || $full) { - // add base path to this Roundcube installation -- $base_path = preg_replace('![^/]+$!', '', strval($_SERVER['SCRIPT_NAME'])); - if ($base_path == '') $base_path = '/'; - $prefix = $base_path; - -@@ -879,6 +858,36 @@ - } - } - -+ /** -+ * CSRF attack prevention code -+ * -+ * @param int Request mode -+ */ -+ public function request_security_check($mode = rcube_utils::INPUT_POST) -+ { -+ // don't check for valid request tokens in these actions -+ // @TODO: get rid of this -+ $request_check_whitelist = array('spell'=>1, 'spell_html'=>1); -+ -+ if ($request_check_whitelist[$this->action]) { -+ return; -+ } -+ -+ // check request token -+ if (!$this->check_request($mode)) { -+ self::raise_error(array( -+ 'code' => 403, 'type' => 'php', -+ 'message' => "Request security check failed"), false, true); -+ } -+ -+ // check referer if configured -+ if ($this->config->get('referer_check') && !rcube_utils::check_referer()) { -+ self::raise_error(array( -+ 'code' => 403, 'type' => 'php', -+ 'message' => "Referer check failed"), true, true); -+ } -+ } -+ - /** - * Registers action aliases for current task - * -diff -ur roundcubemail-1.1.orig/program/js/app.js roundcubemail-1.1/program/js/app.js ---- roundcubemail-1.1.orig/program/js/app.js 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/js/app.js 2014-11-05 13:58:01.124092291 +0100 -@@ -58,7 +58,6 @@ +diff --git a/program/js/app.js b/program/js/app.js +index 31544ab..188a223 100644 +--- a/program/js/app.js ++++ b/program/js/app.js +@@ -58,7 +58,6 @@ function rcube_webmail() request_timeout: 180, // seconds draft_autosave: 0, // seconds comm_path: './', @@ -589,18 +685,17 @@ recipients_separator: ',', recipients_delimiter: ', ', popup_width: 1150, -@@ -163,6 +162,10 @@ +@@ -163,6 +162,9 @@ function rcube_webmail() return; } + if (!this.env.blankpage) -+ this.env.blankpage = (this.env.assets_path ? this.env.assets_path : '') + 'program/resources/blank.gif'; -+ ++ this.env.blankpage = this.assets_path('program/resources/blank.gif'); + // find all registered gui containers for (n in this.gui_containers) this.gui_containers[n] = $('#'+this.gui_containers[n]); -@@ -1405,8 +1408,10 @@ +@@ -1405,8 +1407,10 @@ function rcube_webmail() if (task == 'mail') url += '&_mbox=INBOX'; @@ -612,7 +707,7 @@ this.redirect(url); }; -@@ -1416,7 +1421,10 @@ +@@ -1416,7 +1420,10 @@ function rcube_webmail() if (!url) url = this.env.comm_path; @@ -624,18 +719,35 @@ }; this.reload = function(delay) -@@ -7982,7 +7990,7 @@ +@@ -7982,7 +7989,7 @@ function rcube_webmail() img.onload = function() { ref.env.browser_capabilities.tif = 1; }; img.onerror = function() { ref.env.browser_capabilities.tif = 0; }; - img.src = 'program/resources/blank.tif'; -+ img.src = (this.env.assets_path ? this.env.assets_path : '') + 'program/resources/blank.tif'; ++ img.src = this.assets_path('program/resources/blank.tif'); }; this.pdf_support_check = function() -diff -ur roundcubemail-1.1.orig/program/js/editor.js roundcubemail-1.1/program/js/editor.js ---- roundcubemail-1.1.orig/program/js/editor.js 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/js/editor.js 2014-11-05 13:58:01.125092291 +0100 +@@ -8039,6 +8046,15 @@ function rcube_webmail() + return 0; + }; + ++ this.assets_path = function(path) ++ { ++ if (this.env.assets_path && !path.startsWith(this.env.assets_path)) { ++ path = this.env.assets_path + path; ++ } ++ ++ return path; ++ }; ++ + // Cookie setter + this.set_cookie = function(name, value, expires) + { +diff --git a/program/js/editor.js b/program/js/editor.js +index 3c10ad8..3226188 100644 +--- a/program/js/editor.js ++++ b/program/js/editor.js @@ -36,11 +36,12 @@ function rcube_text_editor(config, id) { @@ -646,11 +758,11 @@ theme: 'modern', language: config.lang, - content_css: 'program/js/tinymce/roundcube/content.css?v2', -+ content_css: (rcmail.env.assets_path || '') + 'program/js/tinymce/roundcube/content.css?v2', ++ content_css: rcmail.assets_path('program/js/tinymce/roundcube/content.css?v2'), menubar: false, statusbar: false, toolbar_items_size: 'small', -@@ -82,7 +83,7 @@ +@@ -82,7 +83,7 @@ function rcube_text_editor(config, id) toolbar: 'bold italic underline | alignleft aligncenter alignright alignjustify' + ' | bullist numlist outdent indent ltr rtl blockquote | forecolor backcolor | fontselect fontsizeselect' + ' | link unlink table | emoticons charmap image media | code searchreplace undo redo', @@ -659,9 +771,10 @@ spellchecker_language: rcmail.env.spell_lang, accessibility_focus: false, file_browser_callback: function(name, url, type, win) { ref.file_browser_callback(name, url, type); }, -diff -ur roundcubemail-1.1.orig/program/lib/Roundcube/rcube.php roundcubemail-1.1/program/lib/Roundcube/rcube.php ---- roundcubemail-1.1.orig/program/lib/Roundcube/rcube.php 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/lib/Roundcube/rcube.php 2014-11-05 13:58:01.125092291 +0100 +diff --git a/program/lib/Roundcube/rcube.php b/program/lib/Roundcube/rcube.php +index 03f4963..12056cf 100644 +--- a/program/lib/Roundcube/rcube.php ++++ b/program/lib/Roundcube/rcube.php @@ -28,9 +28,15 @@ */ class rcube @@ -679,7 +792,7 @@ /** * Singleton instace of rcube * -@@ -101,6 +107,12 @@ +@@ -101,6 +107,12 @@ class rcube */ public $user; @@ -692,7 +805,7 @@ /* private/protected vars */ protected $texts; -@@ -978,6 +990,104 @@ +@@ -978,6 +990,104 @@ class rcube /** @@ -797,18 +910,10 @@ * Build a valid URL to this instance of Roundcube * * @param mixed Either a string with the action or url parameters as key-value pairs -@@ -1265,7 +1375,7 @@ - - $cli = php_sapi_name() == 'cli'; - -- if (($log || $terminate) && !$cli && $arg['message']) { -+ if ($log && !$cli && $arg['message']) { - $arg['fatal'] = $terminate; - self::log_bug($arg); - } -diff -ur roundcubemail-1.1.orig/program/steps/addressbook/delete.inc roundcubemail-1.1/program/steps/addressbook/delete.inc ---- roundcubemail-1.1.orig/program/steps/addressbook/delete.inc 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/steps/addressbook/delete.inc 2014-11-05 13:58:01.125092291 +0100 +diff --git a/program/steps/addressbook/delete.inc b/program/steps/addressbook/delete.inc +index f5b8e4e..9a23c59 100644 +--- a/program/steps/addressbook/delete.inc ++++ b/program/steps/addressbook/delete.inc @@ -20,10 +20,11 @@ */ @@ -823,10 +928,27 @@ $delcnt = 0; // remove previous deletes -diff -ur roundcubemail-1.1.orig/program/steps/addressbook/func.inc roundcubemail-1.1/program/steps/addressbook/func.inc ---- roundcubemail-1.1.orig/program/steps/addressbook/func.inc 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/steps/addressbook/func.inc 2014-11-05 13:58:01.126092293 +0100 -@@ -896,13 +896,13 @@ +diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc +index 2c22d5a..b73d986 100644 +--- a/program/steps/addressbook/func.inc ++++ b/program/steps/addressbook/func.inc +@@ -785,11 +785,12 @@ function rcmail_contact_photo($attrib) + if ($result = $CONTACTS->get_result()) + $record = $result->first(); + +- $photo_img = $attrib['placeholder'] ? $RCMAIL->output->get_skin_file($attrib['placeholder']) : 'program/resources/blank.gif'; ++ $photo_img = $attrib['placeholder'] ? $RCMAIL->output->abs_url($attrib['placeholder'], true) : 'program/resources/blank.gif'; + if ($record['_type'] == 'group' && $attrib['placeholdergroup']) +- $photo_img = $RCMAIL->output->get_skin_file($attrib['placeholdergroup']); ++ $photo_img = $RCMAIL->output->abs_url($attrib['placeholdergroup'], true); ++ ++ $RCMAIL->output->set_env('photo_placeholder', $RCMAIL->output->asset_url($photo_img)); + +- $RCMAIL->output->set_env('photo_placeholder', $photo_img); + unset($attrib['placeholder']); + + $plugin = $RCMAIL->plugins->exec_hook('contact_photo', array('record' => $record, 'data' => $record['photo'])); +@@ -896,13 +897,13 @@ function rcmail_search_update($return = false) * * @return array List of contact IDs per-source */ @@ -842,26 +964,113 @@ $source = (string) rcube_utils::get_input_value('_source', rcube_utils::INPUT_GPC); if (is_array($cid)) { -diff -ur roundcubemail-1.1.orig/program/steps/mail/show.inc roundcubemail-1.1/program/steps/mail/show.inc ---- roundcubemail-1.1.orig/program/steps/mail/show.inc 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/steps/mail/show.inc 2014-11-05 13:58:01.126092293 +0100 -@@ -351,10 +351,10 @@ - '_alt' => $placeholder, +diff --git a/program/steps/addressbook/photo.inc b/program/steps/addressbook/photo.inc +index 30d09ff..962ca31 100644 +--- a/program/steps/addressbook/photo.inc ++++ b/program/steps/addressbook/photo.inc +@@ -90,6 +90,12 @@ if (!$cid && $email) { + $RCMAIL->output->future_expire_header(86400); + } + +-header('Content-Type: ' . rcube_mime::image_content_type($data)); +-echo $data ? $data : file_get_contents('program/resources/blank.gif'); ++if ($data) { ++ header('Content-Type: ' . rcube_mime::image_content_type($data)); ++ echo $data; ++} ++else { ++ header('Content-Type: image/gif'); ++ echo base64_decode(rcmail_output::BLANK_GIF); ++} + exit; +diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc +index 751729c..66db663 100644 +--- a/program/steps/mail/compose.inc ++++ b/program/steps/mail/compose.inc +@@ -949,7 +949,7 @@ function rcmail_compose_body($attrib) + "googie.setCurrentLanguage('%s');\n". + "googie.setDecoration(false);\n". + "googie.decorateTextarea('%s');\n", +- $RCMAIL->output->get_skin_path(), ++ $RCMAIL->output->asset_url($RCMAIL->output->get_skin_path()), + $RCMAIL->url(array('_task' => 'utils', '_action' => 'spell', '_remote' => 1)), + !empty($dictionary) ? 'true' : 'false', + rcube::JQ(rcube::Q($RCMAIL->gettext('checkspelling'))), +diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc +index d3edde2..ad370c4 100644 +--- a/program/steps/mail/show.inc ++++ b/program/steps/mail/show.inc +@@ -341,20 +341,20 @@ function rcmail_message_contactphoto($attrib) + { + global $RCMAIL, $MESSAGE; + +- $placeholder = $attrib['placeholder'] ? $RCMAIL->config->get('skin_path') . $attrib['placeholder'] : null; ++ $placeholder = $attrib['placeholder'] ? $RCMAIL->output->abs_url($attrib['placeholder'], true) : null; ++ $placeholder = $RCMAIL->output->asset_url($placeholder ? $placeholder : 'program/resources/blank.gif'); + + if ($MESSAGE->sender) { + $photo_img = $RCMAIL->url(array( + '_task' => 'addressbook', + '_action' => 'photo', + '_email' => $MESSAGE->sender['mailto'], +- '_alt' => $placeholder, )); - $attrib['onerror'] = "this.src = '" . ($placeholder ? $placeholder : 'program/resources/blank.gif') . "'"; -+ $attrib['onerror'] = "this.src = '" . $RCMAIL->output->asset_url(($placeholder ? $placeholder : 'program/resources/blank.gif')) . "'"; ++ $attrib['onerror'] = "this.src = '$placeholder'"; } else { - $photo_img = $placeholder ? $placeholder : 'program/resources/blank.gif'; -+ $photo_img = ($placeholder ? $placeholder : $RCMAIL->output->asset_url('program/resources/blank.gif')); ++ $photo_img = $placeholder; } return html::img(array('src' => $photo_img, 'alt' => $RCMAIL->gettext('contactphoto')) + $attrib); -diff -ur roundcubemail-1.1.orig/program/steps/utils/error.inc roundcubemail-1.1/program/steps/utils/error.inc ---- roundcubemail-1.1.orig/program/steps/utils/error.inc 2014-11-04 15:28:27.000000000 +0100 -+++ roundcubemail-1.1/program/steps/utils/error.inc 2014-11-05 13:58:01.126092293 +0100 -@@ -50,9 +50,17 @@ +diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc +index 0b2039a..fc57686 100644 +--- a/program/steps/settings/func.inc ++++ b/program/steps/settings/func.inc +@@ -334,13 +334,10 @@ function rcmail_user_prefs($current = null) + $input = new html_radiobutton(array('name'=>'_skin')); + + foreach ($skins as $skin) { +- $thumbnail = "./skins/$skin/thumbnail.png"; +- if (!is_file($thumbnail)) +- $thumbnail = './program/resources/blank.gif'; +- ++ $thumbnail = "skins/$skin/thumbnail.png"; + $skinname = ucfirst($skin); + $author_link = $license_link = ''; +- $meta = @json_decode(@file_get_contents("./skins/$skin/meta.json"), true); ++ $meta = @json_decode(@file_get_contents(INSTALL_PATH . "skins/$skin/meta.json"), true); + + if (is_array($meta) && $meta['name']) { + $skinname = $meta['name']; +@@ -348,10 +345,19 @@ function rcmail_user_prefs($current = null) + $license_link = $meta['license-url'] ? html::a(array('href' => $meta['license-url'], 'target' => '_blank', 'tabindex' => '-1'), rcube::Q($meta['license'])) : rcube::Q($meta['license']); + } + ++ $img = html::img(array( ++ 'src' => $thumbnail, ++ 'class' => 'skinthumbnail', ++ 'alt' => $skin, ++ 'width' => 64, ++ 'height' => 64, ++ 'onerror' => "this.src = rcmail.assets_path('program/resources/blank.gif')", ++ )); ++ + $skinnames[] = mb_strtolower($skinname); + $blocks['skin']['options'][$skin]['content'] = html::label(array('class' => 'skinselection'), + html::span('skinitem', $input->show($config['skin'], array('value' => $skin, 'id' => $field_id.$skin))) . +- html::span('skinitem', html::img(array('src' => $thumbnail, 'class' => 'skinthumbnail', 'alt' => $skin, 'width' => 64, 'height' => 64))) . ++ html::span('skinitem', $img) . + html::span('skinitem', html::span('skinname', rcube::Q($skinname)) . html::br() . + html::span('skinauthor', $author_link ? 'by ' . $author_link : '') . html::br() . + html::span('skinlicense', $license_link ? $RCMAIL->gettext('license').': ' . $license_link : '')) +diff --git a/program/steps/utils/error.inc b/program/steps/utils/error.inc +index ec0d038..6bbc57f 100644 +--- a/program/steps/utils/error.inc ++++ b/program/steps/utils/error.inc +@@ -50,9 +50,17 @@ else if ($ERROR_CODE == 401) { // forbidden due to request check else if ($ERROR_CODE == 403) { @@ -881,3 +1090,4 @@ } // failed request (wrong step in URL) +
View file
debian.changelog
Changed
@@ -1,3 +1,15 @@ +roundcubemail (1:1.1~dev20141111-0~kolab2) unstable; urgency=low + + * Refresh patches + + -- Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Fri, 14 Nov 2014 07:14:39 +0200 + +roundcubemail (1:1.1~dev20141111-0~kolab1) unstable; urgency=low + + * New GIT snapshot (01bc27536a7a78a74ce7b316fed102150b5dbcc3) + + -- Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Tue, 11 Nov 2014 07:14:39 +0200 + roundcubemail (1:1.1~dev20141105-0~kolab1) unstable; urgency=low * New GIT snapshot (2883fcba2bf3fcff286a70c3629016a0c53a6803)
View file
roundcubemail-1.1.tar.gz/CHANGELOG
Changed
@@ -52,6 +52,7 @@ - Don't remove links when html signature is converted to text (#1489621) - Fix page title when using search filter (#1490023) - Fix mbox files import +- Fix some character sets detection (#1490135) - Fix so attachment charset is set in headers of forward/draft message (#1490109) - Fix bug where wrong charset could be used for text attachment preview page (#1490106) - Fix setting flags on servers with no PERMANENTFLAGS response (#1490087)
View file
roundcubemail-1.1.tar.gz/INSTALL
Changed
@@ -39,7 +39,7 @@ or SQLite support in PHP * One of the above databases with permission to create tables * An SMTP server (recommended) or PHP configured for mail delivery -* Composer installed either locally or globally +* Composer installed either locally or globally (https://getcomposer.org) INSTALLATION @@ -49,7 +49,7 @@ 2. Install dependencies using composer: - get composer from https://getcomposer.org/download/ - rename the composer.json-dist file into composer.json - - run `php composer.phar install` + - run `php composer.phar install --no-dev` 3. Make sure that the following directories (and the files within) are writable by the webserver - /temp
View file
roundcubemail-1.1.tar.gz/UPGRADING
Changed
@@ -40,15 +40,18 @@ directory into the target folder: ./skins/ ./plugins/ -4. Run ./bin/update.sh from the commandline OR + ./vendor/ +4. Run `./bin/update.sh` from the commandline OR open http://url-to-roundcube/installer/ in a browser and choose "3 Test config". To enable the latter one, you have to temporary set 'enable_installer' to true in your local config/config.inc.php file. WARNING: See SQLite database upgrade below. 5. Let the update script/installer check your configuration and update your config files and database schema as suggested by the updater. -6. Make sure 'enable_installer' is set to false again. -7. See Post-Upgrade Activities section. +5. If you previously installed plugins through composer, update dependencies + by running `php composer.phar update --no-dev` +7. Make sure 'enable_installer' is set to false again. +8. See Post-Upgrade Activities section. Post-Upgrade Activities
View file
roundcubemail-1.1.tar.gz/bin/installto.sh
Changed
@@ -5,7 +5,7 @@ | bin/installto.sh | | | | This file is part of the Roundcube Webmail client | - | Copyright (C) 2012, The Roundcube Dev Team | + | Copyright (C) 2014, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -50,7 +50,7 @@ break; } } - foreach (array('index.php','.htaccess','config/defaults.inc.php','CHANGELOG','README.md','UPGRADING','LICENSE') as $file) { + foreach (array('index.php','.htaccess','config/defaults.inc.php','composer.json-dist','CHANGELOG','README.md','UPGRADING','LICENSE') as $file) { if (!system("rsync -av " . INSTALL_PATH . "$file $target_dir/$file")) { $err = true; break;
View file
roundcubemail-1.1.tar.gz/bin/update.sh
Changed
@@ -5,7 +5,7 @@ | bin/update.sh | | | | This file is part of the Roundcube Webmail client | - | Copyright (C) 2010-2013, The Roundcube Dev Team | + | Copyright (C) 2010-2014, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -162,6 +162,60 @@ $success = !$res; } + // update composer dependencies + if (is_file(INSTALL_PATH . 'composer.json') && is_readable(INSTALL_PATH . 'composer.json-dist')) { + $composer_data = json_decode(file_get_contents(INSTALL_PATH . 'composer.json'), true); + $composer_template = json_decode(file_get_contents(INSTALL_PATH . 'composer.json-dist'), true); + $comsposer_json = null; + + // update the require section with the new dependencies + if (is_array($composer_data['require']) && is_array($composer_template['require'])) { + $composer_data['require'] = array_merge($composer_data['require'], $composer_template['require']); + /* TO BE ADDED LATER + $old_packages = array(); + for ($old_packages as $pkg) { + if (array_key_exists($composer_data['require'], $pkg)) { + unset($composer_data['require'][$pkg]); + } + } + */ + } + + // use the JSON encoder from the Composer package + if (is_file('composer.phar')) { + include 'phar://composer.phar/src/Composer/Json/JsonFile.php'; + $comsposer_json = \Composer\Json\JsonFile::encode($composer_data); + } + // PHP 5.4's json_encode() does the job, too + else if (defined('JSON_PRETTY_PRINT')) { + $comsposer_json = json_encode($composer_data, JSON_PRETTY_PRINT & JSON_UNESCAPED_SLASHES); + } + else { + $success = false; + $comsposer_json = null; + } + + // write updated composer.json back to disk + if (0&&$comsposer_json && is_writeable(INSTALL_PATH . 'composer.json')) { + $success &= (bool)file_put_contents(INSTALL_PATH . 'composer.json', $comsposer_json); + } + else { + echo "WARNING: unable to update composer.json!\n"; + echo "Please replace the 'require' section in your composer.json with the following:\n"; + + $require_json = ''; + foreach ($composer_data['require'] as $pkg => $ver) { + $require_json .= sprintf(' "%s": "%s",'."\n", $pkg, $ver); + } + + echo ' "require": {'."\n"; + echo rtrim($require_json, ",\n"); + echo "\n }\n\n"; + } + + echo "NOTE: Update dependencies by running `php composer.phar update --no-dev`\n"; + } + // index contacts for fulltext searching if ($opts['version'] && version_compare(version_parse($opts['version']), '0.6.0', '<')) { system("php " . INSTALL_PATH . 'bin/indexcontacts.sh');
View file
roundcubemail-1.1.tar.gz/composer.json-dist
Changed
@@ -30,7 +30,7 @@ ], "require": { "php": ">=5.3.7", - "roundcube/plugin-installer": ">=0.1.3", + "roundcube/plugin-installer": ">=0.1.5", "pear/mail_mime": ">=1.8.9", "pear/mail_mime-decode": ">=1.5.5", "pear/net_smtp": "dev-master",
View file
roundcubemail-1.1.tar.gz/plugins/acl/localization/fa_AF.inc
Added
@@ -0,0 +1,26 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/acl/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'اشتراک گذاری'; +$labels['username'] = 'کاربر:'; +$labels['newuser'] = 'افزودن مدخل'; +$labels['aclw'] = 'نوشتن نشانه ها'; +$labels['aclp'] = 'ارسال'; +$labels['acla'] = 'مدیر'; +$labels['aclfull'] = 'کنترل کامل'; +$labels['aclother'] = 'دیگر'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/acl/localization/ku.inc
Added
@@ -0,0 +1,83 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/acl/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Parvekirin'; +$labels['myrights'] = 'Mafên Têketinê'; +$labels['username'] = 'Bikarhêner:'; +$labels['advanced'] = 'Moda pêşketî'; +$labels['newuser'] = 'Têketinek zêde bike'; +$labels['editperms'] = 'Destûrdayînan Sererast Bike'; +$labels['actions'] = 'Digihîje tevgerên çê..'; +$labels['anyone'] = 'Hemû bikarhêner (her kes)'; +$labels['anonymous'] = 'Mêvan (gelêrî)'; +$labels['identifier'] = 'Danasîner'; +$labels['acll'] = 'Lê bigere'; +$labels['aclr'] = 'Peyaman bixwîne'; +$labels['aclw'] = 'Alayan binivîse'; +$labels['aclp'] = 'Şandî'; +$labels['aclc'] = 'Bindosyeyan çêke'; +$labels['aclk'] = 'Bindosyeyan çêke'; +$labels['acld'] = 'Peyaman binivîse'; +$labels['aclt'] = 'Peyaman jê bibe'; +$labels['acle'] = 'Jê derxîne'; +$labels['aclx'] = 'Dosyeyê jê bibe'; +$labels['acla'] = 'Birêvebir'; +$labels['acln'] = 'Bi nîşeyan peyaman rave bike'; +$labels['aclfull'] = 'Tam venêrîn'; +$labels['aclother'] = 'Ên din'; +$labels['aclread'] = 'Bixwîne'; +$labels['aclwrite'] = 'Binivîse'; +$labels['acldelete'] = 'Jê bibe'; +$labels['shortacll'] = 'Lê bigere'; +$labels['shortaclr'] = 'Bixwîne'; +$labels['shortacls'] = 'Bihêle'; +$labels['shortaclw'] = 'Binivîse'; +$labels['shortacli'] = 'Tev bike'; +$labels['shortaclp'] = 'Şandî'; +$labels['shortaclc'] = 'Çêke'; +$labels['shortaclk'] = 'Çêke'; +$labels['shortacld'] = 'Jê bibe'; +$labels['shortaclt'] = 'Jê bibe'; +$labels['shortacle'] = 'Jê derxîne'; +$labels['shortaclx'] = 'Dosye-jêbirin'; +$labels['shortacla'] = 'Bikarhêner'; +$labels['shortacln'] = 'Bi nîşeyan rave bike'; +$labels['shortaclother'] = 'Ên din'; +$labels['shortaclread'] = 'Bixwîne'; +$labels['shortaclwrite'] = 'Binivîse'; +$labels['shortacldelete'] = 'Jê bibe'; +$labels['longaclr'] = 'Dosye ji bo xwendinê dikare bê vekirin'; +$labels['longacls'] = 'Alaya peyamên Dîtî dikare bête guhartin'; +$labels['longaclread'] = 'Dosye ji bo xwendinê dikare bê vekirin'; +$labels['longaclwrite'] = 'Peyam dikarin kopiyî dosyeyê bên kirin, nîşankirin, nivîsandin.'; +$labels['longacldelete'] = 'Hêmî peyam dikarin werin jêbirin'; +$labels['longaclother'] = 'Mafên din ên têketinê'; +$labels['ariasummaryacltable'] = 'Lîsteya mafên têketinê'; +$labels['arialabelaclactions'] = 'Tevgeran liste bike'; +$labels['arialabelaclform'] = 'Forma mafên têketinê'; +$messages['deleting'] = 'Mafên têketinê tên jêbirin...'; +$messages['saving'] = 'Mafên têketinê tên tomarkirin...'; +$messages['updatesuccess'] = 'Mafên têketinê bi serkeftin hatin guhartin'; +$messages['deletesuccess'] = 'Mafên têketinê bi serkeftin hatin jêbirin'; +$messages['createsuccess'] = 'Mafên têketinê bi serkeftin hatin tevkirin'; +$messages['updateerror'] = 'Nûkirina mafên têketinê bigire'; +$messages['deleteerror'] = 'Jêbirina mafên têketinê bigire'; +$messages['createerror'] = 'Tevkirina mafên têketinê bigire'; +$messages['deleteconfirm'] = 'Tu ewle yî, dixwazî mafên têketinê yên bikarhênerê(n) bijartî rakî?'; +$messages['norights'] = 'Tu maf nehat diyarkirin!'; +$messages['nouser'] = 'Tu bikarhêner nehat diyarkirin!'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/acl/localization/ku_IQ.inc
Added
@@ -0,0 +1,26 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/acl/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'هاوبەشکردن'; +$labels['username'] = 'بەکارهێنەر:'; +$labels['advanced'] = 'شێوازی پێشکەوتوو'; +$labels['shortaclc'] = 'دروستکردن'; +$labels['shortaclk'] = 'دروستکردن'; +$labels['shortacld'] = 'سڕینەوە'; +$labels['shortaclt'] = 'سڕینەوە'; +$labels['shortaclx'] = 'سڕینەوەی بوخچە'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/acl/localization/pt_PT.inc
Changed
@@ -75,7 +75,7 @@ $labels['longacle'] = 'As mensagens podem ser purgadas'; $labels['longaclx'] = 'A pasta pode ser eliminada ou renomeada'; $labels['longacla'] = 'As permissões de acesso da pasta podem ser alteradas'; -$labels['longacln'] = 'Mensagens partilhadas de metadados (anotações) podem ser alteradas'; +$labels['longacln'] = 'Mensagens de metadados (anotações) partilhadas podem ser alteradas'; $labels['longaclfull'] = 'Controlo total incluindo administração de pastas'; $labels['longaclread'] = 'A pasta pode ser aberta para leitura'; $labels['longaclwrite'] = 'As mensagens podem ser marcadas, guardadas ou copiadas para a pasta';
View file
roundcubemail-1.1.tar.gz/plugins/archive/localization/ku_IQ.inc
Added
@@ -0,0 +1,22 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/archive/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ئەرشیف'; +$labels['archivefolder'] = 'ئەرشیف'; +$labels['settingstitle'] = 'ئەرشیف'; +$labels['unkownsender'] = 'نەناسراو'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/archive/localization/tr_TR.inc
Changed
@@ -22,7 +22,7 @@ $labels['archiveerror'] = 'Bazı mesajlar arşivlenemedi.'; $labels['archivefolder'] = 'Arşiv'; $labels['settingstitle'] = 'Arşiv'; -$labels['archivetype'] = 'Arşivi bunla böl'; +$labels['archivetype'] = 'Arşivi bununla böl'; $labels['archivetypeyear'] = 'Yıl (Arşiv/2012)'; $labels['archivetypemonth'] = 'Ay(Arşiv/2012/06)'; $labels['archivetypefolder'] = 'Özgün dosya';
View file
roundcubemail-1.1.tar.gz/plugins/attachment_reminder/localization/ku.inc
Added
@@ -0,0 +1,20 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/attachment_reminder/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Te ji bîr kir da pelekê pêve bikî?"; +$messages['reminderoption'] = "Pêvekên jibîrkirî bi bîr bixe"; +$messages['keywords'] = "pêvek, pel, pêve bike, pêvekirî, pêve dike, rapêçandî, CV, tîpa bergê";
View file
roundcubemail-1.1.tar.gz/plugins/attachment_reminder/localization/ku_IQ.inc
Added
@@ -0,0 +1,20 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/attachment_reminder/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "ئایا لەبیرت کرد پەڕگەیەک هاوپێچ بکەی؟"; +$messages['reminderoption'] = "بیرهێنانەوە دەربارەی هاوپێچە لەبیرکراوەکان"; +$messages['keywords'] = "";
View file
roundcubemail-1.1.tar.gz/plugins/help/localization/ku.inc
Added
@@ -0,0 +1,21 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/help/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Help plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/ +*/ +$labels['help'] = 'Alîkarî'; +$labels['about'] = 'Dervar'; +$labels['license'] = 'Lîsans'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/help/localization/ku_IQ.inc
Added
@@ -0,0 +1,21 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/help/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Help plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/ +*/ +$labels['help'] = 'یارمەتی'; +$labels['about'] = 'دەربارە'; +$labels['license'] = 'مۆڵەت'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/hide_blockquote/localization/ku.inc
Added
@@ -0,0 +1,21 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/hide_blockquote/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Hide-Blockquote plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/ +*/ +$labels['hide'] = 'Veşêre'; +$labels['show'] = 'Nîşan bide'; +$labels['quotelimit'] = 'Jêgirtinê bigire dema ku hejmara rêzan zêdetir be ji'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/managesieve/localization/fa_AF.inc
Added
@@ -0,0 +1,85 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/managesieve/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Managesieve plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/ +*/ +$labels['filters'] = 'فیلترها'; +$labels['filtername'] = 'نام فیلتر'; +$labels['newfilter'] = 'فیلتر جدید'; +$labels['filteranyof'] = 'تطبیق با هر کدام از رول های زیر'; +$labels['filterany'] = 'تمام پیام ها'; +$labels['filtercontains'] = 'شامل'; +$labels['filteris'] = 'مساوی با'; +$labels['filterunder'] = 'زیر'; +$labels['filterover'] = 'بالای'; +$labels['addrule'] = 'افزودن نقش'; +$labels['delrule'] = 'حذف نقش'; +$labels['messagereply'] = 'پاسخ توسط پیام'; +$labels['messagedelete'] = 'حذف پیام'; +$labels['add'] = 'افزودن'; +$labels['del'] = 'حذف'; +$labels['sender'] = 'فرستنده'; +$labels['recipient'] = 'گیرنده'; +$labels['days'] = 'روز'; +$labels['filtersets'] = 'مجموعه فیلتر'; +$labels['filterdef'] = 'تعریف فیلتر'; +$labels['newfilterset'] = 'مجموعه فیلترهای جدید'; +$labels['active'] = 'فعال'; +$labels['none'] = 'هیچ کدام'; +$labels['flagread'] = 'خواندن'; +$labels['flagdeleted'] = 'حذف شد'; +$labels['flagflagged'] = 'نشانه گذاری شده'; +$labels['flagdraft'] = 'پیش نویس'; +$labels['varlength'] = 'طول'; +$labels['notifyimportancenormal'] = 'عادی'; +$labels['notifymethodmailto'] = 'ایمیل'; +$labels['nextstep'] = 'مرحله بعدی'; +$labels['...'] = '...'; +$labels['currdate'] = 'تاریخ کنونی'; +$labels['datetest'] = 'تاریخ'; +$labels['dateheader'] = 'سرایند:'; +$labels['year'] = 'سال'; +$labels['month'] = 'ماه'; +$labels['day'] = 'روز'; +$labels['second'] = 'ثانیه'; +$labels['address'] = 'آدرس'; +$labels['envelope'] = 'پاکت نامه'; +$labels['modifier'] = 'ویرایش کننده:'; +$labels['text'] = 'متن'; +$labels['contenttype'] = 'نوع محتوا'; +$labels['allparts'] = 'همه'; +$labels['domain'] = 'دامنه'; +$labels['localpart'] = 'جز محلی'; +$labels['user'] = 'کاربر'; +$labels['detail'] = 'جزئیات'; +$labels['comparator'] = 'مقایسه کننده:'; +$labels['default'] = 'پیش فرض'; +$labels['index'] = 'اندیس'; +$labels['vacation'] = 'تعطیلات'; +$labels['vacation.reply'] = 'پیام پاسخ'; +$labels['vacation.advanced'] = 'تنظیمات پیشرفته'; +$labels['vacation.subject'] = 'موضوع'; +$labels['vacation.body'] = 'متن پیام'; +$labels['vacation.status'] = 'وضعیت'; +$labels['vacation.on'] = 'فعال'; +$labels['vacation.off'] = 'غیرفعال'; +$labels['arialabelfilterform'] = 'خصوصیات فیلترها'; +$labels['ariasummaryfilterslist'] = 'لیست فیلترها'; +$messages['filterdeleted'] = 'فیلتر با موفقیت حذف شد.'; +$messages['filtersaved'] = 'فیلتر با موفقیت ذخیره شد.'; +$messages['deactivated'] = 'فیلتر(ها) با موفقیت غیر فعال شدند'; +$messages['nametoolong'] = 'نام بسیار بلند است.'; +$messages['namereserved'] = 'نام رزرو شده.'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/managesieve/localization/ku.inc
Added
@@ -0,0 +1,90 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/managesieve/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Managesieve plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/ +*/ +$labels['filterany'] = 'hemû peyam'; +$labels['filtercontains'] = 'dihewîne'; +$labels['filternotcontains'] = 'nahebîne'; +$labels['filteris'] = 'weke'; +$labels['filterisnot'] = 'ne weke'; +$labels['filterexists'] = 'heye'; +$labels['filternotexists'] = 'tune ye'; +$labels['filterunder'] = 'bin'; +$labels['filterover'] = 'ser'; +$labels['messagemoveto'] = 'Peyamê bibe '; +$labels['messageredirect'] = 'Peyamê vegerîne'; +$labels['messagereply'] = 'Bi peyamekê bibersivîne'; +$labels['messagedelete'] = 'Peyamê jê bibe'; +$labels['add'] = 'Tev bike'; +$labels['del'] = 'Jê bibe'; +$labels['sender'] = 'Şandyar'; +$labels['vacationaddr'] = 'Navnîşanên e-mailên min ên din:'; +$labels['vacationsubject'] = 'Mijara peyamê:'; +$labels['days'] = 'roj'; +$labels['seconds'] = 'saniye'; +$labels['enable'] = 'Veke/Bigire'; +$labels['active'] = 'çalak'; +$labels['none'] = 'qet'; +$labels['fromfile'] = 'ji dosyeyê'; +$labels['filterdisabled'] = 'Parzing girtî ye'; +$labels['countisgreaterthan'] = 'hejmar mezintir e ji'; +$labels['countisgreaterthanequal'] = 'hejmar weke an jî mezintir e ji'; +$labels['countislessthan'] = 'hejmar kêmtir e ji'; +$labels['countequals'] = 'hejmar weke '; +$labels['countnotequals'] = 'hejmar ne weke'; +$labels['flagread'] = 'Xwendî'; +$labels['flagdeleted'] = 'Jêbirî'; +$labels['flaganswered'] = 'Nebersivandî'; +$labels['flagflagged'] = 'Bialakirî'; +$labels['varlength'] = 'Dirêjahî'; +$labels['notify'] = 'Agahiyê bişîne'; +$labels['notifyimportance'] = 'Girîng:'; +$labels['notifyimportancelow'] = 'nizm'; +$labels['notifyimportancehigh'] = 'bilind'; +$labels['notifymethodmailto'] = 'Email'; +$labels['notifymethodtel'] = 'Telefon'; +$labels['notifymethodsms'] = 'SMS'; +$labels['filtercreate'] = 'Parzingek çêke'; +$labels['nextstep'] = 'Gava pêşde'; +$labels['...'] = '...'; +$labels['currdate'] = 'Dîroka niha'; +$labels['datetest'] = 'Dîrok'; +$labels['year'] = 'sal'; +$labels['month'] = 'meh'; +$labels['day'] = 'roj'; +$labels['date'] = 'dîrok (ssss-mm--rr)'; +$labels['julian'] = 'dîrok (julian)'; +$labels['hour'] = 'saet'; +$labels['minute'] = 'deqîqe'; +$labels['second'] = 'saniye'; +$labels['time'] = 'dem (ss:dd:ss)'; +$labels['iso8601'] = 'dem (ISO8601)'; +$labels['zone'] = 'qada demê'; +$labels['weekday'] = 'rojên hefteyê (0-6)'; +$labels['address'] = 'navnîşan'; +$labels['text'] = 'nivîs'; +$labels['contenttype'] = 'cûreya naverokê'; +$labels['modtype'] = 'cûre'; +$labels['allparts'] = 'hemû'; +$labels['user'] = 'bikarhêner'; +$labels['detail'] = 'detay'; +$labels['vacation.reply'] = 'Peyamê bibersivîne'; +$labels['vacation.advanced'] = 'Mihengên pêşketî'; +$labels['vacation.subject'] = 'Mijar'; +$labels['vacation.status'] = 'Rewş'; +$labels['vacation.on'] = 'Vekirî'; +$labels['vacation.addresses'] = 'Navnîşanên min ên din'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/markasjunk/localization/fa_AF.inc
Added
@@ -0,0 +1,21 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/markasjunk/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Mark-As-Junk plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/ +*/ +$labels['buttontext'] = 'هرزنامه'; +$labels['buttontitle'] = 'نشانه گذاری به عنوان هرزنامه'; +$labels['reportedasjunk'] = 'با موفقبت به عنوان هرزنامه گزارش شد'; +?> \ No newline at end of file
View file
roundcubemail-1.1.tar.gz/plugins/markasjunk/localization/ku.inc
Deleted
@@ -1,20 +0,0 @@ -<?php - -/* - +-----------------------------------------------------------------------+ - | plugins/markasjunk/localization/<lang>.inc | - | | - | Localization file of the Roundcube Webmail Mark-As-Junk plugin | - | Copyright (C) 2012-2013, The Roundcube Dev Team | - | | - | Licensed under the GNU General Public License version 3 or | - | any later version with exceptions for skins & plugins. | - | See the README file for a full license statement. | - | | - +-----------------------------------------------------------------------+ - - For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/ -*/ -$labels['buttontitle'] = 'nawnişani bka ba şkaw'; -$labels['reportedasjunk'] = 'ba gşti raport kra'; -?> \ No newline at end of file
View file
roundcubemail-1.1.tar.gz/plugins/new_user_dialog/localization/br.inc
Added
@@ -0,0 +1,20 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/new_user_dialog/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail New User Dialog plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/ +*/ +$labels['identitydialogtitle'] = 'Bizskrivit hoc\'h anv kaser mar plij'; +$labels['identitydialoghint'] = 'Diskouezet eo ar boest e-pad ar c\'hentañ kennask.'; +?> \ No newline at end of file
View file
roundcubemail-1.1.tar.gz/plugins/newmail_notifier/localization/ku.inc
Added
@@ -0,0 +1,28 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/newmail_notifier/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail New Mail Notifier plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/ +*/ +$labels['basic'] = 'Agahdariyên gerokê li ser peyama nû bide nîşan'; +$labels['desktop'] = 'Agahdariyên sermasê li ser peyama nû bide nîşan'; +$labels['sound'] = 'Deng li ser peyameke nû veke'; +$labels['test'] = 'Test'; +$labels['title'] = 'Emaila Nû!'; +$labels['body'] = 'Peyameke te ya nû heye.'; +$labels['testbody'] = 'Ev agahdariyeke testê ye.'; +$labels['desktopdisabled'] = 'Agahdariyên sermasê di geroka te de girtî ne. '; +$labels['desktopunsupported'] = 'Geroka te bi agahdariyên sermasê re ne ahengdar e.'; +$labels['desktoptimeout'] = 'Ahahadariya sermasê bigire'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/newmail_notifier/localization/ku_IQ.inc
Added
@@ -0,0 +1,19 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/newmail_notifier/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail New Mail Notifier plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/ +*/ +$labels['test'] = 'تاقیکردنەوە'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/newmail_notifier/localization/tr_TR.inc
Changed
@@ -17,12 +17,12 @@ */ $labels['basic'] = 'Yeni mesajlarda web tarayıcı bildirimlerini göster'; $labels['desktop'] = 'Yeni mesajlarda masa üstü bildirimlerini göster'; -$labels['sound'] = 'Yeni mesajlarda muzik çal'; +$labels['sound'] = 'Yeni mesajlarda müzik çal'; $labels['test'] = 'Deneme'; $labels['title'] = 'Yeni E-posta!'; $labels['body'] = 'Yeni bir mesaj aldınız'; $labels['testbody'] = 'Bu bir test bildirimidir.'; -$labels['desktopdisabled'] = 'Web tarayıcınızda masa üstü bildirimi iptal edildi'; -$labels['desktopunsupported'] = 'Web tarayıcınız masa üstü bildidrimleri desteklemiyor'; +$labels['desktopdisabled'] = 'Web tarayıcınızda masaüstü bildirimi iptal edildi'; +$labels['desktopunsupported'] = 'Web tarayıcınız masaüstü bildirimleri desteklemiyor'; $labels['desktoptimeout'] = 'Masaüstü bildirimini kapat'; ?>
View file
roundcubemail-1.1.tar.gz/plugins/password/localization/ku.inc
Added
@@ -0,0 +1,33 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/password/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Password plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/ +*/ +$labels['changepasswd'] = 'Şîfreyê biguherîne'; +$labels['curpasswd'] = 'Şîfreya niha:'; +$labels['newpasswd'] = 'Şîfreya nû:'; +$labels['confpasswd'] = 'Şîfreya nû bipejirîne:'; +$messages['nopassword'] = 'Şîfreya nû binivîse.'; +$messages['nocurpassword'] = 'Şîfreya niha binivîse.'; +$messages['passwordincorrect'] = 'Şîfreya niha xelet e.'; +$messages['passwordinconsistency'] = 'Şîfre hevdu nagirin, dîsa biceribîne.'; +$messages['crypterror'] = 'Şîfreya nû nehat tomarkirin. Fonksiyona şîfrekirinê hat jibîrkirin.'; +$messages['connecterror'] = 'Şîfreya nû nehat tomarkirin. Çewtiya girêdanê.'; +$messages['internalerror'] = 'Şîfre nehat tomarkirin.'; +$messages['passwordshort'] = 'Divê şîfre ji $length karakteran kêmtir nebe.'; +$messages['passwordweak'] = 'Divê di şîfreyê de herî kêm hejmarek û karakterekî xalbendiyê hebe.'; +$messages['passwordforbidden'] = 'Şîfre karakterên qedexe dihewîne.'; +$messages['firstloginchange'] = 'Ev têketina te ya yekemîn e. Ji kerema xwe şîfreya xwe biguherîne.'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/password/localization/ku_IQ.inc
Added
@@ -0,0 +1,30 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/password/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Password plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/ +*/ +$labels['changepasswd'] = 'گۆڕینی تێپەڕەوشە'; +$labels['curpasswd'] = 'تێپەڕەوشەی ئێستا:'; +$labels['newpasswd'] = 'تێپەڕەوشەی نوێ:'; +$labels['confpasswd'] = 'پشتڕاستکردنەوەی تێپەڕەوشەی نوێ:'; +$messages['nopassword'] = 'تکایە تێپەڕەوشەی نوێ بنووسە.'; +$messages['nocurpassword'] = 'تکایە تێپەڕەوشەی ئێستا بنووسە.'; +$messages['passwordincorrect'] = 'تێپەڕەوشەی ئێستا نادروستە.'; +$messages['passwordinconsistency'] = 'تێپەڕەوشەکان هاویەک نین، تکایە دووبارە هەوڵبدەوە.'; +$messages['connecterror'] = 'نەتوانرا تێپەڕەوشەی نوێ پاشەکەوت بکرێت. هەڵەی پەیوەندیکردن.'; +$messages['internalerror'] = 'نەتوانرا تێپەڕەوشەی نوێ پاشەکەوت بکرێت.'; +$messages['passwordforbidden'] = 'تێپەڕەوشە نووسەی ڕێپێنەدراوی تێدایە.'; +$messages['firstloginchange'] = 'ئەمە یەکەم چوونەژوورەوەتە. تکایە تێپەڕەوشەکەت بگۆڕە.'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/subscriptions_option/localization/ku.inc
Added
@@ -0,0 +1,19 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/subscriptions_option/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Subscriptions plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/ +*/ +$labels['useimapsubscriptions'] = 'Abonetiyên IMAPê bi kar bîne'; +?>
View file
roundcubemail-1.1.tar.gz/plugins/userinfo/localization/ku_IQ.inc
Added
@@ -0,0 +1,22 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/userinfo/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Userinfo plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/ +*/ +$labels['userinfo'] = 'زانیاری بەکارهێنەر'; +$labels['created'] = 'دروستکرا'; +$labels['lastlogin'] = 'دوایین چوونەژوورەوە'; +$labels['defaultidentity'] = 'ناسنامەی بنەڕەتی'; +?> \ No newline at end of file
View file
roundcubemail-1.1.tar.gz/plugins/vcard_attachments/localization/br.inc
Added
@@ -0,0 +1,20 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/vcard_attachments/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Vcard Attachments plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/ +*/ +$labels['addvcardmsg'] = 'Ouzhpennañ ar vCard d\'ar c\'harned chomlec\'hioù'; +$labels['vcardsavefailed'] = 'N\'haller ket enrollañ ar vCard'; +?> \ No newline at end of file
View file
roundcubemail-1.1.tar.gz/plugins/vcard_attachments/localization/ku.inc
Added
@@ -0,0 +1,20 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/vcard_attachments/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Vcard Attachments plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/ +*/ +$labels['addvcardmsg'] = 'vCardê tevî deftera navnîşanan bike'; +$labels['vcardsavefailed'] = 'Tomarkirina vCard betal bike'; +?> \ No newline at end of file
View file
roundcubemail-1.1.tar.gz/plugins/zipdownload/localization/ku.inc
Added
@@ -0,0 +1,22 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/zipdownload/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Zipdownload plugin | + | Copyright (C) 2012-2014, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/ +*/ +$labels['downloadall'] = 'Hemû pêvekan daxîne'; +$labels['download'] = 'Daxîne...'; +$labels['downloadmbox'] = 'Mbox format (.zip)'; +$labels['downloadmaildir'] = 'Maildir format (.zip)'; +$labels['downloademl'] = 'Çavkanî (.eml)';
View file
roundcubemail-1.1.tar.gz/plugins/zipdownload/localization/ku_IQ.inc
Added
@@ -0,0 +1,22 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | plugins/zipdownload/localization/<lang>.inc | + | | + | Localization file of the Roundcube Webmail Zipdownload plugin | + | Copyright (C) 2012-2014, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/ +*/ +$labels['downloadall'] = 'داگرتنی هەموو هاوپێچەکان'; +$labels['download'] = 'داگرتن...'; +$labels['downloadmbox'] = 'Mbox format (.zip)'; +$labels['downloadmaildir'] = 'Maildir format (.zip)'; +$labels['downloademl'] = 'Source (.eml)';
View file
roundcubemail-1.1.tar.gz/program/lib/Roundcube/rcube_charset.php
Changed
@@ -654,36 +654,47 @@ if ($string[0] == "\0" && $string[1] != "\0" && $string[2] == "\0" && $string[3] != "\0") return 'UTF-16BE'; if ($string[0] != "\0" && $string[1] == "\0" && $string[2] != "\0" && $string[3] == "\0") return 'UTF-16LE'; - if (function_exists('mb_detect_encoding')) { - if (empty($language)) { - $rcube = rcube::get_instance(); - $language = $rcube->get_user_language(); - } + if (empty($language)) { + $rcube = rcube::get_instance(); + $language = $rcube->get_user_language(); + } - // Prioritize charsets according to current language (#1485669) - switch ($language) { - case 'ja_JP': - $prio = array('ISO-2022-JP', 'JIS', 'UTF-8', 'EUC-JP', 'eucJP-win', 'SJIS', 'SJIS-win'); - break; + // Prioritize charsets according to current language (#1485669) + switch ($language) { + case 'ja_JP': + $prio = array('ISO-2022-JP', 'JIS', 'UTF-8', 'EUC-JP', 'eucJP-win', 'SJIS', 'SJIS-win'); + break; - case 'zh_CN': - case 'zh_TW': - $prio = array('UTF-8', 'BIG-5', 'GB2312', 'EUC-TW'); - break; + case 'zh_CN': + case 'zh_TW': + $prio = array('UTF-8', 'BIG-5', 'GB2312', 'EUC-TW'); + break; - case 'ko_KR': - $prio = array('UTF-8', 'EUC-KR', 'ISO-2022-KR'); - break; + case 'ko_KR': + $prio = array('UTF-8', 'EUC-KR', 'ISO-2022-KR'); + break; - case 'ru_RU': - $prio = array('UTF-8', 'WINDOWS-1251', 'KOI8-R'); - break; + case 'ru_RU': + $prio = array('UTF-8', 'WINDOWS-1251', 'KOI8-R'); + break; + + case 'tr_TR': + $prio = array('UTF-8', 'ISO-8859-9', 'WINDOWS-1254'); + break; + } - case 'tr_TR': - $prio = array('UTF-8', 'ISO-8859-9', 'WINDOWS-1254'); - break; + // mb_detect_encoding() is not reliable for some charsets (#1490135) + // use mb_check_encoding() to make charset priority lists really working + if ($prio && function_exists('mb_check_encoding')) { + foreach ($prio as $encoding) { + if (mb_check_encoding($string, $encoding)) { + return $encoding; + } + } + } - default: + if (function_exists('mb_detect_encoding')) { + if (!$prio) { $prio = array('UTF-8', 'SJIS', 'GB2312', 'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', @@ -695,7 +706,9 @@ $encodings = array_unique(array_merge($prio, mb_list_encodings())); - return mb_detect_encoding($string, $encodings); + if ($encoding = mb_detect_encoding($string, $encodings)) { + return $encoding; + } } // No match, check for UTF-8
View file
roundcubemail-1.1.tar.gz/program/localization/ku/messages.inc
Changed
@@ -15,13 +15,19 @@ For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/ */ +$messages['errortitle'] = 'Çewtiyek pêk hat!'; $messages['loginfailed'] = 'Têketin têk çû'; $messages['cookiesdisabled'] = 'Geroka te destûrê nade çerezan'; $messages['sessionerror'] = 'Danişîna te çewt e an jî bi dawî bûye'; $messages['storageerror'] = 'Girêdana pêşkêşkara IMAP têk çû'; $messages['nomessagesfound'] = 'Di vê peyamdankê de tu peyam nehat dîtin'; $messages['loggedout'] = 'Te danişînî bi dawî anî. Oxir be!'; +$messages['mailboxempty'] = 'Cihê peyamên hatî vala ye'; +$messages['nomessages'] = 'Peyam nîn in'; +$messages['refreshing'] = 'Tê tezekirin...'; $messages['loading'] = 'Tê barkirin...'; +$messages['uploading'] = 'Pel tê barkirin...'; +$messages['uploadingmany'] = 'Pel tên barkirin...'; $messages['loadingdata'] = 'Dane tên barkirin...'; $messages['checkingmail'] = 'Li peyamên nû vedinihêre...'; $messages['sendingmessage'] = 'Peyamê dişîne...'; @@ -29,6 +35,8 @@ $messages['savingmessage'] = 'Peyam tê hilanîn...'; $messages['messagesaved'] = 'Peyam di Hilanînî de hat hilanîn'; $messages['successfullysaved'] = 'Hat hilanîn'; +$messages['savingresponse'] = 'Bersiva nivîsê tê tomarkirin...'; +$messages['deleteresponseconfirm'] = 'Tu bi rastî dixwazî vê nivîsa bersivê jê bibî?'; $messages['addedsuccessfully'] = 'Têkilî li navnîşanan hat zêdekirin'; $messages['contactexists'] = 'Têkiliyeke bi vê navnîşanê jixwe heye'; $messages['blockedimages'] = 'Ji bo ewlekariya te wêneyên cuda yên vê peyamê hatin astenkirin.'; @@ -36,12 +44,17 @@ $messages['nocontactsfound'] = 'Tu têkiliyek nehat dîtin'; $messages['contactnotfound'] = 'Têkiliya dihat xwestin nehat dîtin'; $messages['sendingfailed'] = 'Peyam nehat şandin'; +$messages['senttooquickly'] = 'Ji kerema xwe, bo $ saniyek saniye(yan) bisekine beriya şandina vê peyamê.'; +$messages['errorsaving'] = 'Wextê tomarkirinê çewtiyek çêbû. '; $messages['errormoving'] = 'Ciyê peyamê nehat guherandin'; $messages['errordeleting'] = 'Peyam nehat jêbirin'; $messages['deletecontactconfirm'] = 'Ji dil dixwazî têkiliya/ên nîşankirî jê bibî?'; $messages['deletemessagesconfirm'] = 'Ji dil dixwazî peya/ên nîşankirî jê bibî?'; $messages['deletefolderconfirm'] = 'Ji dil dixwazî vê peldankê jê bibî?'; $messages['purgefolderconfirm'] = 'Ji dil dixwazî hemû peyamên di vê peldankê de jê bibî?'; +$messages['groupdeleting'] = 'Kom tê rakirin...'; +$messages['folderdeleting'] = 'Dosye tê rakirin...'; +$messages['foldermoving'] = 'Dosye tê kêşandin...'; $messages['formincomplete'] = 'Form bi temamî nehat tijekirin'; $messages['noemailwarning'] = 'Tika ye, navnîşaneke rast têkevê'; $messages['nonamewarning'] = 'Tika ye, navekî têkevê'; @@ -56,8 +69,10 @@ $messages['searchnomatch'] = 'Di lêgerînê de tu tişt nehat dîtin'; $messages['searching'] = 'Digere...'; $messages['checking'] = 'Vedinihêre...'; +$messages['stillsearching'] = 'Hin lê digere...'; $messages['nospellerrors'] = 'Tu şaşiyeke rastnivîsê nehat dîtin'; $messages['folderdeleted'] = 'Peldank hat jêbirin'; +$messages['folderpurged'] = 'Dosye bi serkeftin hat valakirin.'; $messages['deletedsuccessfully'] = 'Hat jêbirin'; $messages['converting'] = 'Formatkirin ji peyamê tê birin...'; $messages['messageopenerror'] = 'Peyam ji pêşkêşkar nehat barkirin'; @@ -66,7 +81,10 @@ $messages['sourceisreadonly'] = 'Çavkaniya vê navnîşanê tenê-xwendin e'; $messages['errorsavingcontact'] = 'Navnîşana têkiliyê nehat barkirin'; $messages['movingmessage'] = 'Ciyê peyamê tê guhertin...'; +$messages['copyingmessage'] = 'Peyam(gel) tên kopîkirin... '; +$messages['deletingmessage'] = 'Peyam(gel) tê jêbirin...'; $messages['receiptsent'] = 'Rapora şandina serkeftî'; $messages['errorsendingreceipt'] = 'Rapor nehat şandin'; $messages['nodeletelastidentity'] = 'Nikarî vê nasnameyê jê bibî. Ew ya dawî ye.'; +$messages['groupcreated'] = 'Kom bi serkeftin hat afirandin.'; ?>
View file
roundcubemail-1.1.tar.gz/program/localization/ku_IQ
Added
+(directory)
View file
roundcubemail-1.1.tar.gz/program/localization/ku_IQ/labels.inc
Added
@@ -0,0 +1,99 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | localization/<lang>/labels.inc | + | | + | Localization file of the Roundcube Webmail client | + | Copyright (C) 2005-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/labels/ +*/ +$labels['welcome'] = 'بەخێربێیت بۆ $product'; +$labels['username'] = 'ناوی بەکارهێنەر'; +$labels['password'] = 'تێپەڕەوشە'; +$labels['login'] = 'چوونەژوورەوە'; +$labels['logout'] = 'دەرچوون'; +$labels['settings'] = 'ڕێکخستنەکان'; +$labels['inbox'] = 'هاتوو'; +$labels['sent'] = 'نێردراو'; +$labels['subject'] = 'ناونیشان'; +$labels['from'] = 'لە'; +$labels['to'] = 'بۆ'; +$labels['date'] = 'بەروار'; +$labels['size'] = 'قەبارە'; +$labels['readstatus'] = 'ڕەوشی خوێندنەوە'; +$labels['listoptions'] = 'لیستی هەڵبژاردەکان'; +$labels['mailboxlist'] = 'بوخچەکان'; +$labels['copy'] = 'لەبەرگرتنەوە'; +$labels['move'] = 'گواستنەوە'; +$labels['moveto'] = 'گواستنەوە بۆ'; +$labels['copyto'] = 'گواستنەوە بۆ...'; +$labels['download'] = 'داگرتن'; +$labels['open'] = 'کردنەوە'; +$labels['showattachment'] = 'پیشاندان'; +$labels['filename'] = 'ناوی پەڕگە'; +$labels['filesize'] = 'قەبارەی پەڕگە'; +$labels['reply'] = 'وەڵامدانەوە'; +$labels['options'] = 'هەڵبژاردەکان'; +$labels['first'] = 'یەکەم'; +$labels['last'] = 'کۆتایی'; +$labels['previous'] = 'پێشتر'; +$labels['next'] = 'دواتر'; +$labels['select'] = 'هەڵبژاردن'; +$labels['all'] = 'هەمووی'; +$labels['none'] = 'هیچ'; +$labels['currpage'] = 'پەڕی ئێستا'; +$labels['list'] = 'لیست'; +$labels['fromto'] = 'لە/بۆ'; +$labels['attachment'] = 'هاوپێچ'; +$labels['nonesort'] = 'هیچ'; +$labels['sentdate'] = 'بەرواری ناردن'; +$labels['arrival'] = 'بەرواری گەیشتن'; +$labels['empty'] = 'بەتاڵ'; +$labels['unknown'] = 'نەناسراو'; +$labels['unlimited'] = 'بێ سنوور'; +$labels['quotatotal'] = 'سنوور'; +$labels['quotaused'] = 'بەکارهاتوو'; +$labels['allfolders'] = 'هەموو بوخچەکان'; +$labels['send'] = 'ناردن'; +$labels['responsename'] = 'ناو'; +$labels['attach'] = 'هاوپێچ'; +$labels['attachments'] = 'هاوپێچەکان'; +$labels['upload'] = 'بارکردن'; +$labels['close'] = 'داخستن'; +$labels['nickname'] = 'نازناو'; +$labels['jobtitle'] = 'ناونیشانی کار'; +$labels['department'] = 'بەش'; +$labels['gender'] = 'ڕەگەز'; +$labels['phone'] = 'تەلەفۆن'; +$labels['address'] = 'ناونیشان'; +$labels['street'] = 'شەقام'; +$labels['locality'] = 'شار'; +$labels['country'] = 'وڵات'; +$labels['birthday'] = 'ڕۆژی لەدایکبوون'; +$labels['website'] = 'ماڵپەڕ'; +$labels['notes'] = 'تێبینییەکان'; +$labels['male'] = 'نێر'; +$labels['female'] = 'مێ'; +$labels['manager'] = 'بەڕێوەبەر'; +$labels['allfields'] = 'هەموو خانەکان'; +$labels['search'] = 'گەڕان'; +$labels['searchresult'] = 'ئەنجامی گەڕان'; +$labels['advsearch'] = 'گەڕانی پێشکەوتوو'; +$labels['advanced'] = 'پێشکەوتوو'; +$labels['typehome'] = 'ماڵ'; +$labels['typework'] = 'کار'; +$labels['typemobile'] = 'مۆبایل'; +$labels['typemain'] = 'سەرەکی'; +$labels['savelocalstorage'] = ""; +$labels['helplistkeyboardnavigation'] = ""; +$labels['helplistkeyboardnavmessages'] = ""; +$labels['helplistkeyboardnavcontacts'] = ""; +?>
View file
roundcubemail-1.1.tar.gz/program/localization/ku_IQ/messages.inc
Added
@@ -0,0 +1,20 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | localization/<lang>/messages.inc | + | | + | Localization file of the Roundcube Webmail client | + | Copyright (C) 2005-2014, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/messages/ +*/ +$messages['errortitle'] = 'هەڵەیەک ڕوویدا!'; +$messages['loginfailed'] = 'چوونەژوورەوە سەرکەوتوو نەبوو.'; +?>
View file
roundcubemail-1.1.tar.gz/program/localization/ru_RU/csv2vcard.inc
Added
@@ -0,0 +1,45 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | localization/ru_RU/csv2vcard.inc | + | | + | Language file of the Roundcube Webmail client | + | Copyright (C) 2005-2014, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + | Author: Aleksander Machniak <alec@alec.pl> | + +-----------------------------------------------------------------------+ +*/ +$map['birth_day'] = "День рождения"; +$map['birth_month'] = "Месяц рождения"; +$map['birth_year'] = "Год рождения"; +$map['display_name'] = "Отображаемое имя"; +$map['fax_number'] = "Номер факса"; +$map['home_address'] = "Адрес"; +$map['home_city_short'] = "Город"; +$map['home_state_short'] = "Штат"; +$map['home_country'] = "Страна"; +$map['home_zipcode'] = "Почтовый индекс"; +$map['mobile_number'] = "Номер сотового телефона"; +$map['nickname'] = "Псевдоним"; +$map['organization'] = "Организация"; +$map['pager_number'] = "Номер пейджера"; +$map['primary_email'] = "Адрес электронной почты"; +$map['secondary_email'] = "Альтернативный адрес электронной почты"; +$map['web_page_1'] = "Веб-страница 1"; +$map['web_page_2'] = "Веб-страница 2"; +$map['web_page'] = "Веб-страница"; +$map['notes'] = "Заметки"; +$map['work_phone'] = "Рабочий телефон"; +$map['work_address'] = "Адрес (раб.)"; +$map['work_country'] = "Страна (раб.)"; +$map['work_zipcode'] = "Почтовый индекс (раб.)"; +$map['last'] = "Фамилия"; +$map['first'] = "Имя"; +$map['work_city'] = "Город (раб.)"; +$map['work_state_short'] = "Штат (раб.)";
View file
roundcubemail-1.1.tar.gz/program/steps/mail/sendmail.inc
Changed
@@ -428,8 +428,7 @@ $attachment = $RCMAIL->plugins->exec_hook('attachment_get', $attachment); if ($isHtml) { - $dispurl = '/\s(poster|src)\s*=\s*[\'"]*\S+display-attachment\S+file=rcmfile' - . preg_quote($attachment['id']) . '[\s\'"]*/'; + $dispurl = '/[\'"]\S+display-attachment\S+file=rcmfile' . preg_quote($attachment['id']) . '[\'"]/'; $message_body = $MAIL_MIME->getHTMLBody(); $is_inline = preg_match($dispurl, $message_body); } @@ -449,7 +448,7 @@ $cid .= '@localhost'; } - $message_body = preg_replace($dispurl, ' \\1="cid:' . $cid . '" ', $message_body); + $message_body = preg_replace($dispurl, '"cid:' . $cid . '"', $message_body); $MAIL_MIME->setHTMLBody($message_body);
View file
roundcubemail-1.1.tar.gz/skins/larry/mail.css
Changed
@@ -992,6 +992,7 @@ #messagebody p.image-attachment { position: relative; padding: 1em; + margin-bottom: 0; border-top: 1px solid #ccc; }
View file
roundcubemail.dsc
Changed
@@ -2,7 +2,7 @@ Source: roundcubemail Binary: roundcubemail Architecture: all -Version: 1:1.1~dev20141105-0~kolab1 +Version: 1:1.1~dev20141111-0~kolab1 Maintainer: Debian Roundcube Maintainers <pkg-roundcube-maintainers@lists.alioth.debian.org> Uploaders: Vincent Bernat <bernat@debian.org>, Romain Beauxis <toots@rastageeks.org>, Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com>, Paul Klos <kolab@klos2day.nl> Homepage: http://www.roundcube.net/
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.