#9880: ldap login impossible with php5.5
authorPhilipp Schüle <p.schuele@metaways.de>
Wed, 30 Apr 2014 11:15:22 +0000 (13:15 +0200)
committerPhilipp Schüle <p.schuele@metaways.de>
Wed, 7 May 2014 15:14:11 +0000 (17:14 +0200)
... due to deprecated use of e flag in preg_replace in zend framework

* adds fix by Frederic Heihoff, based on current ZF1

https://forge.tine20.org/mantisbt/view.php?id=9880

Change-Id: Iaf46830e014d11e81dd023ece639433aecb1a31f
Reviewed-on: http://gerrit.tine20.com/customers/585
Tested-by: Jenkins CI (http://ci.tine20.com/)
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
Tested-by: Philipp Schüle <p.schuele@metaways.de>
tests/tine20/Zend/AllTests.php
tests/tine20/Zend/Ldap/ConvertTest.php [new file with mode: 0644]
tine20/Zend/Ldap/Converter.php [new file with mode: 0644]

index b0cf290..3a53115 100644 (file)
@@ -36,6 +36,7 @@ class Zend_AllTests
         $suite = new PHPUnit_Framework_TestSuite('Test for Zend rewritten stuff');
         $suite->addTestSuite('Zend_Translate_Adapter_GettextPoTest');
         $suite->addTestSuite('Zend_Translate_TranslateTest');
+        $suite->addTestSuite('Zend_Ldap_ConvertTest');
         return $suite;
     }
 }
diff --git a/tests/tine20/Zend/Ldap/ConvertTest.php b/tests/tine20/Zend/Ldap/ConvertTest.php
new file mode 100644 (file)
index 0000000..93fce5d
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Tine 2.0 - http://www.tine20.org
+ * 
+ * @package     Tinebase
+ * @license     http://www.gnu.org/licenses/agpl.html
+ * @copyright   Copyright (c) 2014 Metaways Infosystems GmbH (http://www.metaways.de)
+ * @author      Philipp Schüle <p.schuele@metaways.de>
+ */
+
+/**
+ * Test class for Zend Ldap Convert
+ */
+class Zend_Ldap_ConvertTest extends TestCase
+{
+    protected function _getUit()
+    {
+        if ($this->_uit === null) {
+            $this->_uit = new Zend_Ldap_Converter();
+        }
+
+        return $this->_uit;
+    }
+
+    public function testHex32ToAsc()
+    {
+        $result = $this->_getUit()->hex32ToAsc('0x0C');
+        $this->assertEquals('12', $result);
+    }
+}
diff --git a/tine20/Zend/Ldap/Converter.php b/tine20/Zend/Ldap/Converter.php
new file mode 100644 (file)
index 0000000..caee232
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category   Zend
+ * @package    Zend_Ldap
+ * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ * @version    $Id: Converter.php 10020 2009-08-18 14:34:09Z j.fischer@metaways.de $
+ */
+
+/**
+ * Zend_Ldap_Converter is a collection of useful LDAP related conversion functions.
+ *
+ * @category   Zend
+ * @package    Zend_Ldap
+ * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+class Zend_Ldap_Converter
+{
+    /**
+     * Converts all ASCII chars < 32 to "\HEX"
+     *
+     * @see Net_LDAP2_Util::asc2hex32() from Benedikt Hallinger <beni@php.net>
+     * @link http://pear.php.net/package/Net_LDAP2
+     * @author Benedikt Hallinger <beni@php.net>
+     *
+     * @param  string $string String to convert
+     * @return string
+     */
+    public static function ascToHex32($string)
+    {
+        for ($i = 0; $i<strlen($string); $i++) {
+            $char = substr($string, $i, 1);
+            if (ord($char)<32) {
+                $hex = dechex(ord($char));
+                if (strlen($hex) == 1) $hex = '0' . $hex;
+                $string = str_replace($char, '\\' . $hex, $string);
+            }
+        }
+        return $string;
+    }
+
+    /**
+     * Converts all Hex expressions ("\HEX") to their original ASCII characters
+     *
+     * @see Net_LDAP2_Util::hex2asc() from Benedikt Hallinger <beni@php.net>,
+     * heavily based on work from DavidSmith@byu.net
+     * @link http://pear.php.net/package/Net_LDAP2
+     * @author Benedikt Hallinger <beni@php.net>, heavily based on work from DavidSmith@byu.net
+     *
+     * @param  string $string String to convert
+     * @return string
+     */
+    public static function hex32ToAsc($string)
+    {
+        $string = preg_replace_callback("/\\\([0-9A-Fa-f]{2})/", array('Zend_Ldap_Converter', '_charHex32ToAsc'), $string); // Hack
+        return $string;
+    }
+
+   /**
+     * Convert a single slash-prefixed character from Hex32 to ASCII.
+     * Used as a callback in @see hex32ToAsc()
+     * @param array $matches
+     *
+     * @return string
+     */
+    private static function _charHex32ToAsc(array $matches)
+    {
+        return chr(hexdec($matches[0]));
+    }
+}