Branch '2.3-stable' - pear/Kolab_Storage release-notes.txt
Gunnar Wrobel
wrobel at kolabsys.com
Fri Jul 29 07:38:42 CEST 2011
pear/Kolab_Storage/ChangeLog | 4
pear/Kolab_Storage/package.info | 6
pear/Kolab_Storage/patches/Kolab_Storage-0.5.2/issue3416.patch | 198 ++++++++++
pear/Kolab_Storage/patches/Kolab_Storage-0.5.2/t_framework_HK_UV_NoDuplicationOnUidChange.diff | 28 +
pear/Kolab_Storage/patches/Kolab_Storage-0.5.2/t_kronolith_HK_GW_ExportEventList.patch | 13
release-notes.txt | 13
6 files changed, 258 insertions(+), 4 deletions(-)
New commits:
commit 8ac71dd8ef3bc4e41699abf291e03175df200d3c
Author: Gunnar Wrobel <wrobel at pardus.de>
Date: Fri Jul 29 05:37:00 2011 +0000
Update to Kolab_Storage-0.5.2
diff --git a/pear/Kolab_Storage/ChangeLog b/pear/Kolab_Storage/ChangeLog
index 176d886..97bebb0 100644
--- a/pear/Kolab_Storage/ChangeLog
+++ b/pear/Kolab_Storage/ChangeLog
@@ -1,3 +1,7 @@
+2011-07-29 Gunnar Wrobel <p at rdus.de>
+
+ * package.info: Update to 0.5.2.
+
2011-05-30 Gunnar Wrobel <p at rdus.de>
* package.info: Update to 0.5.1.
diff --git a/pear/Kolab_Storage/package.info b/pear/Kolab_Storage/package.info
index 21a841e..e66f281 100644
--- a/pear/Kolab_Storage/package.info
+++ b/pear/Kolab_Storage/package.info
@@ -13,13 +13,13 @@ package_url='http://pear.horde.org/index.php?package='
package_origin='WGET'
# Version number
-version='0.5.1'
+version='0.5.2'
# Package release number
-release='20110530'
+release='20110729'
# Source URL to download from
-sourceurl='http://files.kolab.org/server/development-2.3/externals'
+sourceurl='http://files.kolab.org/incoming/wrobel'
# In which PHP library location should the library get installed
php_lib_loc='php'
diff --git a/pear/Kolab_Storage/patches/Kolab_Storage-0.5.2/issue3416.patch b/pear/Kolab_Storage/patches/Kolab_Storage-0.5.2/issue3416.patch
new file mode 100644
index 0000000..0f71833
--- /dev/null
+++ b/pear/Kolab_Storage/patches/Kolab_Storage-0.5.2/issue3416.patch
@@ -0,0 +1,198 @@
+From: Gunnar Wrobel <wrobel at pardus.de>
+Subject: [PATCH] issue3416.patch
+
+Do not block when free/busy is not available.
+
+STATUS: UNMERGED
+
+REF: http://issues.kolab.org/issue3416
+
+Signed-off-by: Gunnar Wrobel <wrobel at pardus.de>
+
+--- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder.php 2010-04-28 17:18:16.000000000 +0200
++++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder.php 2010-04-28 18:05:34.684348740 +0200
+@@ -31,6 +31,8 @@
+ require_once 'Horde/String.php';
+ require_once 'Horde/NLS.php';
+
++require_once 'HTTP/Request.php';
++
+ /**
+ * The root of the Kolab annotation hierarchy, used on the various IMAP folder
+ * that are used by Kolab clients.
+@@ -1256,14 +1258,15 @@
+
+ $options['method'] = 'GET';
+ $options['timeout'] = 5;
++ $options['readTimeout'] = array(5, 1000);
++ $options['socketOptions']['http']['timeout'] = 5.0;
+ $options['allowRedirects'] = true;
+
+ if (isset($conf['http']['proxy']) && !empty($conf['http']['proxy']['proxy_host'])) {
+ $options = array_merge($options, $conf['http']['proxy']);
+ }
+
+- require_once 'HTTP/Request.php';
+- $http = new HTTP_Request($url, $options);
++ $http = new HTTP_Request_NonBlocking($url, $options);
+ $http->setBasicAuth(Auth::getAuth(), Auth::getCredential('password'));
+ @$http->sendRequest();
+ if ($http->getResponseCode() != 200) {
+@@ -1643,3 +1646,157 @@
+ $value);
+ }
+ }
++
++class HTTP_Request_NonBlocking extends HTTP_Request
++{
++ /**
++ * Sends the request
++ *
++ * @access public
++ * @param bool Whether to store response body in Response object property,
++ * set this to false if downloading a LARGE file and using a Listener
++ * @return mixed PEAR error on error, true otherwise
++ */
++ function sendRequest($saveBody = true)
++ {
++ if (!is_a($this->_url, 'Net_URL')) {
++ return PEAR::raiseError('No URL given', HTTP_REQUEST_ERROR_URL);
++ }
++
++ $host = isset($this->_proxy_host) ? $this->_proxy_host : $this->_url->host;
++ $port = isset($this->_proxy_port) ? $this->_proxy_port : $this->_url->port;
++
++ if (strcasecmp($this->_url->protocol, 'https') == 0) {
++ // Bug #14127, don't try connecting to HTTPS sites without OpenSSL
++ if (version_compare(PHP_VERSION, '4.3.0', '<') || !extension_loaded('openssl')) {
++ return PEAR::raiseError('Need PHP 4.3.0 or later with OpenSSL support for https:// requests',
++ HTTP_REQUEST_ERROR_URL);
++ } elseif (isset($this->_proxy_host)) {
++ return PEAR::raiseError('HTTPS proxies are not supported', HTTP_REQUEST_ERROR_PROXY);
++ }
++ $host = 'ssl://' . $host;
++ }
++
++ // magic quotes may fuck up file uploads and chunked response processing
++ $magicQuotes = ini_get('magic_quotes_runtime');
++ ini_set('magic_quotes_runtime', false);
++
++ // RFC 2068, section 19.7.1: A client MUST NOT send the Keep-Alive
++ // connection token to a proxy server...
++ if (isset($this->_proxy_host) && !empty($this->_requestHeaders['connection']) &&
++ 'Keep-Alive' == $this->_requestHeaders['connection'])
++ {
++ $this->removeHeader('connection');
++ }
++
++ $keepAlive = (HTTP_REQUEST_HTTP_VER_1_1 == $this->_http && empty($this->_requestHeaders['connection'])) ||
++ (!empty($this->_requestHeaders['connection']) && 'Keep-Alive' == $this->_requestHeaders['connection']);
++ $sockets = &PEAR::getStaticProperty('HTTP_Request', 'sockets');
++ $sockKey = $host . ':' . $port;
++ unset($this->_sock);
++
++ // There is a connected socket in the "static" property?
++ if ($keepAlive && !empty($sockets[$sockKey]) &&
++ !empty($sockets[$sockKey]->fp))
++ {
++ $this->_sock =& $sockets[$sockKey];
++ $err = null;
++ } else {
++ $this->_notify('connect');
++ $this->_sock =& new Net_Socket();
++ $err = $this->_sock->connect($host, $port, null, $this->_timeout, $this->_socketOptions);
++ $this->_sock->setBlocking(false);
++ }
++ PEAR::isError($err) or $err = $this->_sock->write($this->_buildRequest());
++
++if (!PEAR::isError($err)) {
++ if (!empty($this->_readTimeout)) {
++ $this->_sock->setTimeout($this->_readTimeout[0], $this->_readTimeout[1]);
++ }
++
++ $this->_notify('sentRequest');
++
++ // Read the response
++ $this->_response = &new HTTP_Response($this->_sock, $this->_listeners);
++ $err = $this->_response->process(
++ $this->_saveBody && $saveBody,
++ HTTP_REQUEST_METHOD_HEAD != $this->_method
++ );
++
++ if ($keepAlive) {
++ $keepAlive = (isset($this->_response->_headers['content-length'])
++ || (isset($this->_response->_headers['transfer-encoding'])
++ && strtolower($this->_response->_headers['transfer-encoding']) == 'chunked'));
++ if ($keepAlive) {
++ if (isset($this->_response->_headers['connection'])) {
++ $keepAlive = strtolower($this->_response->_headers['connection']) == 'keep-alive';
++ } else {
++ $keepAlive = 'HTTP/'.HTTP_REQUEST_HTTP_VER_1_1 == $this->_response->_protocol;
++ }
++ }
++ }
++ }
++
++ ini_set('magic_quotes_runtime', $magicQuotes);
++
++ if (PEAR::isError($err)) {
++ return $err;
++ }
++
++ if (!$keepAlive) {
++ $this->disconnect();
++ // Store the connected socket in "static" property
++ } elseif (empty($sockets[$sockKey]) || empty($sockets[$sockKey]->fp)) {
++ $sockets[$sockKey] =& $this->_sock;
++ }
++
++ // Check for redirection
++ if ( $this->_allowRedirects
++ AND $this->_redirects <= $this->_maxRedirects
++ AND $this->getResponseCode() > 300
++ AND $this->getResponseCode() < 399
++ AND !empty($this->_response->_headers['location'])) {
++
++
++ $redirect = $this->_response->_headers['location'];
++
++ // Absolute URL
++ if (preg_match('/^https?:\/\//i', $redirect)) {
++ $this->_url = &new Net_URL($redirect);
++ $this->addHeader('Host', $this->_generateHostHeader());
++ // Absolute path
++ } elseif ($redirect{0} == '/') {
++ $this->_url->path = $redirect;
++
++ // Relative path
++ } elseif (substr($redirect, 0, 3) == '../' OR substr($redirect, 0, 2) == './') {
++ if (substr($this->_url->path, -1) == '/') {
++ $redirect = $this->_url->path . $redirect;
++ } else {
++ $redirect = dirname($this->_url->path) . '/' . $redirect;
++ }
++ $redirect = Net_URL::resolvePath($redirect);
++ $this->_url->path = $redirect;
++
++ // Filename, no path
++ } else {
++ if (substr($this->_url->path, -1) == '/') {
++ $redirect = $this->_url->path . $redirect;
++ } else {
++ $redirect = dirname($this->_url->path) . '/' . $redirect;
++ }
++ $this->_url->path = $redirect;
++ }
++
++ $this->_redirects++;
++ return $this->sendRequest($saveBody);
++
++ // Too many redirects
++ } elseif ($this->_allowRedirects AND $this->_redirects > $this->_maxRedirects) {
++ return PEAR::raiseError('Too many redirects', HTTP_REQUEST_ERROR_REDIRECTS);
++ }
++
++ return true;
++ }
++
++}
diff --git a/pear/Kolab_Storage/patches/Kolab_Storage-0.5.2/t_framework_HK_UV_NoDuplicationOnUidChange.diff b/pear/Kolab_Storage/patches/Kolab_Storage-0.5.2/t_framework_HK_UV_NoDuplicationOnUidChange.diff
new file mode 100644
index 0000000..19bb6a7
--- /dev/null
+++ b/pear/Kolab_Storage/patches/Kolab_Storage-0.5.2/t_framework_HK_UV_NoDuplicationOnUidChange.diff
@@ -0,0 +1,28 @@
+From: root <Gunnar Wrobel wrobel at pardus.de>
+Subject: [PATCH] t/SyncML/HK/GW/DoubleSyncFix
+
+When the uid validity of an IMAP folder changes this confuses the Kolab storage
+driver and leads to double entries. The attached patch has been proposed by
+Univention and should be applied after some cleanup.
+
+REF: https://issues.kolab.org/issue3238
+
+Signed-off-by: root <Gunnar Wrobel wrobel at pardus.de>
+
+--- a/a/a/lib/Horde/Kolab/Storage/Data.php 2008-10-20 16:27:27.000000000 +0200
++++ a/a/a/lib/Horde/Kolab/Storage/Data.php 2008-10-20 16:38:34.000000000 +0200
+@@ -457,6 +457,14 @@ class Kolab_Data {
+ $history = &Horde_History::singleton();
+
+ $history_id = $app . ':' . $this->_folder->getShareId() . ':' . $object_uid;
++
++ // entries that should be added to the history MUST not
++ // have an existing entry in the history!! otherwise
++ // they are just marked as "modified"
++ if ($action == 'add' && $history->getActionTimestamp($history_id, 'add') == 0) {
++ $action = 'modify';
++ }
++
+ $history->log($history_id, array('action' => $action, 'ts' => $mod_ts), true);
+ }
+
diff --git a/pear/Kolab_Storage/patches/Kolab_Storage-0.5.2/t_kronolith_HK_GW_ExportEventList.patch b/pear/Kolab_Storage/patches/Kolab_Storage-0.5.2/t_kronolith_HK_GW_ExportEventList.patch
new file mode 100644
index 0000000..0ef70d6
--- /dev/null
+++ b/pear/Kolab_Storage/patches/Kolab_Storage-0.5.2/t_kronolith_HK_GW_ExportEventList.patch
@@ -0,0 +1,13 @@
+diff --git a/horde-webmail/lib/Horde/Kolab/Storage/List.php b/horde-webmail/lib/Horde/Kolab/Storage/List.php
+index a9bff36..a31ef82 100644
+--- a/a/a/lib/Horde/Kolab/Storage/List.php
++++ b/a/a/lib/Horde/Kolab/Storage/List.php
+@@ -136,7 +136,7 @@ class Kolab_List {
+ */
+ function &listFolders()
+ {
+- if (!isset($this->_list)) {
++ if (!isset($this->_list) || is_a($this->_list, 'PEAR_Error')) {
+ $session = &Horde_Kolab_Session::singleton();
+ $imap = &$session->getImap();
+ if (is_a($imap, 'PEAR_Error')) {
diff --git a/release-notes.txt b/release-notes.txt
index 5c6b599..b0a287e 100644
--- a/release-notes.txt
+++ b/release-notes.txt
@@ -12,7 +12,18 @@ the 1st.README file in the package directory.
kolab/issue4690 (Umlaut problems in system folders)
-
+ - Kolab_Storage-0.5.2-20110729
+
+ bugzilla.kolabsys.com #117 (Groups appear as entries in contact folders)
+ bugzilla.kolabsys.com #135 (Add option to skip EXPUNGE command on object
+ delete)
+ bugzilla.kolabsys.com #137 (Folders caching issue (shutdown function))
+ kolab/issue4466 ((Horde warning "Invalid shutdown callback" in
+ Kolab/Storage/List.php)
+ bugzilla.kolabsys.com #206 (Folder rename and caching issue)
+ bugzilla.kolabsys.com #138 (ACL/MYRIGHTS result is not cached)
+ bugzilla.kolabsys.com #205 (Horde_Kolab_Storage must use MYRIGHTS, not
+ GETACL)
Changes between 2.3.1 and 2.3.2:
More information about the commits
mailing list