summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG1
-rw-r--r--config/main.inc.php.dist1
-rw-r--r--plugins/managesieve/Changelog3
-rw-r--r--plugins/managesieve/lib/Net/Sieve.php43
-rw-r--r--program/include/main.inc15
-rw-r--r--skins/default/templates/messageprint.html1
6 files changed, 55 insertions, 9 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 2a304c50f..7195813ab 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
+- Add variable for 'Today' label in date_today option (#1486120)
- Applied plugin changes since 0.5-stable release
- Fix SQL query in rcube_user::query() so it uses index on MySQL again
- Use only one from IMAP authentication methods to prevent login delays (1487784)
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index ea0092b0d..f00bfa8af 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -347,6 +347,7 @@ $rcmail_config['date_short'] = 'D H:i';
$rcmail_config['date_long'] = 'd.m.Y H:i';
// use this format for today's date display (date or strftime format)
+// Note: $ character will be replaced with 'Today' label
$rcmail_config['date_today'] = 'H:i';
// store draft message is this mailbox
diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog
index ef7573959..20e3bb8c6 100644
--- a/plugins/managesieve/Changelog
+++ b/plugins/managesieve/Changelog
@@ -1,5 +1,8 @@
- Fix escaping of backslash character in quoted strings (#1487780)
- Fix STARTTLS for timsieved < 2.3.10
+- Fix handling of non-safe characters (double-quote, backslash)
+ or UTF-8 characters (dovecot's implementation bug workaround)
+ in script names
* version 3.0 [2011-02-01]
-----------------------------------------------------------
diff --git a/plugins/managesieve/lib/Net/Sieve.php b/plugins/managesieve/lib/Net/Sieve.php
index d4cc3eeda..0f6a5f67a 100644
--- a/plugins/managesieve/lib/Net/Sieve.php
+++ b/plugins/managesieve/lib/Net/Sieve.php
@@ -475,7 +475,9 @@ class Net_Sieve
if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
return PEAR::raiseError('Not currently in TRANSACTION state', 1);
}
- if (PEAR::isError($res = $this->_doCmd(sprintf('HAVESPACE "%s" %d', $scriptname, $size)))) {
+
+ $command = sprintf('HAVESPACE %s %d', $this->_escape($scriptname), $size);
+ if (PEAR::isError($res = $this->_doCmd($command))) {
return $res;
}
return true;
@@ -740,7 +742,9 @@ class Net_Sieve
if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
return PEAR::raiseError('Not currently in AUTHORISATION state', 1);
}
- if (PEAR::isError($res = $this->_doCmd(sprintf('DELETESCRIPT "%s"', $scriptname)))) {
+
+ $command = sprintf('DELETESCRIPT %s', $this->_escape($scriptname));
+ if (PEAR::isError($res = $this->_doCmd($command))) {
return $res;
}
return true;
@@ -759,7 +763,8 @@ class Net_Sieve
return PEAR::raiseError('Not currently in AUTHORISATION state', 1);
}
- if (PEAR::isError($res = $this->_doCmd(sprintf('GETSCRIPT "%s"', $scriptname)))) {
+ $command = sprintf('GETSCRIPT %s', $this->_escape($scriptname));
+ if (PEAR::isError($res = $this->_doCmd($command))) {
return $res;
}
@@ -779,9 +784,12 @@ class Net_Sieve
if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
return PEAR::raiseError('Not currently in AUTHORISATION state', 1);
}
- if (PEAR::isError($res = $this->_doCmd(sprintf('SETACTIVE "%s"', $scriptname)))) {
+
+ $command = sprintf('SETACTIVE %s', $this->_escape($scriptname));
+ if (PEAR::isError($res = $this->_doCmd($command))) {
return $res;
}
+
$this->_activeScript = $scriptname;
return true;
}
@@ -808,9 +816,10 @@ class Net_Sieve
$res = explode("\r\n", $res);
foreach ($res as $value) {
if (preg_match('/^"(.*)"( ACTIVE)?$/i', $value, $matches)) {
- $scripts[] = $matches[1];
+ $script_name = stripslashes($matches[1]);
+ $scripts[] = $script_name;
if (!empty($matches[2])) {
- $activescript = $matches[1];
+ $activescript = $script_name;
}
}
}
@@ -833,8 +842,10 @@ class Net_Sieve
}
$stringLength = $this->_getLineLength($scriptdata);
+ $command = sprintf("PUTSCRIPT %s {%d+}\r\n%s",
+ $this->_escape($scriptname), $stringLength, $scriptdata);
- if (PEAR::isError($res = $this->_doCmd(sprintf("PUTSCRIPT \"%s\" {%d+}\r\n%s", $scriptname, $stringLength, $scriptdata)))) {
+ if (PEAR::isError($res = $this->_doCmd($command))) {
return $res;
}
@@ -1213,6 +1224,24 @@ class Net_Sieve
}
/**
+ * Convert string into RFC's quoted-string or literal-c2s form
+ *
+ * @param string $string The string to convert.
+ *
+ * @return string Result string
+ */
+ function _escape($string)
+ {
+ // Some implementations doesn't allow UTF-8 characters in quoted-string
+ // It's safe to use literal-c2s
+ if (preg_match('/[^\x01-\x09\x0B-\x0C\x0E-\x7F]/', $string)) {
+ return sprintf("{%d+}\r\n%s", $this->_getLineLength($string), $string);
+ }
+
+ return '"' . addcslashes($string, '\\"') . '"';
+ }
+
+ /**
* Write debug text to the current debug output handler.
*
* @param string $message Debug message text.
diff --git a/program/include/main.inc b/program/include/main.inc
index 7be7488b5..3ac26dc17 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -1067,7 +1067,18 @@ function format_date($date, $format=NULL)
$out .= date($format{$i}, $timestamp);
}
- return $today ? (rcube_label('today') . ' ' . $out) : $out;
+ if ($today) {
+ $label = rcube_label('today');
+ // replcae $ character with "Today" label (#1486120)
+ if (strpos($out, '$') !== false) {
+ $out = preg_replace('/\$/', $label, $out, 1);
+ }
+ else {
+ $out = $label . ' ' . $out;
+ }
+ }
+
+ return $out;
}
@@ -1685,7 +1696,7 @@ function rcube_html_editor($mode='')
{
global $RCMAIL, $CONFIG;
- $hook = $RCMAIL->plugins->exec_hook('hmtl_editor', array('mode' => $mode));
+ $hook = $RCMAIL->plugins->exec_hook('html_editor', array('mode' => $mode));
if ($hook['abort'])
return;
diff --git a/skins/default/templates/messageprint.html b/skins/default/templates/messageprint.html
index f2775cd61..ea7a320f9 100644
--- a/skins/default/templates/messageprint.html
+++ b/skins/default/templates/messageprint.html
@@ -2,6 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><roundcube:object name="pagetitle" /></title>
+<link rel="shortcut icon" href="/images/favicon.ico"/>
<link rel="stylesheet" type="text/css" href="/print.css" />
</head>
<body>