Cache the LDAP connection as early as possible.
authorGunnar Wrobel <p@rdus.de>
Tue, 2 Jun 2009 14:34:26 +0000 (16:34 +0200)
committerGunnar Wrobel <p@rdus.de>
Tue, 2 Jun 2009 19:27:55 +0000 (21:27 +0200)
framework/Kolab_Server/lib/Horde/Kolab/Server.php

index 269c81a..55e7900 100644 (file)
@@ -149,52 +149,55 @@ abstract class Horde_Kolab_Server
 
         static $instances = array();
 
-        if (!empty($params['driver'])) {
-            $driver = $params['driver'];
-            unset($params['driver']);
-        } else if (isset($conf['kolab']['server']['driver'])) {
-            $driver = $conf['kolab']['server']['driver'];
-            if (isset($conf['kolab']['server']['params'])) {
-                if (!is_array($params)) {
-                    $params = $conf['kolab']['server']['params'];
-                } else {
-                    $params = array_merge($conf['kolab']['server']['params'],
-                                          $params);
-                }
-            }
-        } else {
-            throw new Horde_Kolab_Server_Exception(
-                'The configuration for the Kolab server driver is missing!');
-        }
+        $sparam = $params;
+        $sparam['pass'] = isset($sparam['pass']) ? hash('sha256', $sparam['pass']) : '';
+        ksort($sparam);
+        $signature = serialize($sparam);
 
-        if (isset($params['user']) && !isset($params['uid'])) {
-            $tmp_server = &Horde_Kolab_Server::factory($driver, $params);
+        if (empty($instances[$signature])) {
 
-            try {
-                $uid = $tmp_server->uidForIdOrMail($params['user']);
-            } catch (Horde_Kolab_Server_Exception $e) {
+            if (!empty($params['driver'])) {
+                $driver = $params['driver'];
+                unset($params['driver']);
+            } else if (isset($conf['kolab']['server']['driver'])) {
+                $driver = $conf['kolab']['server']['driver'];
+                if (isset($conf['kolab']['server']['params'])) {
+                    if (!is_array($params)) {
+                        $params = $conf['kolab']['server']['params'];
+                    } else {
+                        $params = array_merge($conf['kolab']['server']['params'],
+                                              $params);
+                    }
+                }
+            } else {
                 throw new Horde_Kolab_Server_Exception(
-                    sprintf(_("Failed identifying the UID of the Kolab user %s. Error was: %s"),
-                            $params['user'],
-                            $e->getMessage()));
+                    'The configuration for the Kolab server driver is missing!');
             }
-            if ($uid === false) {
-                throw new Horde_Kolab_Server_MissingObjectException(
-                    sprintf(_("Failed identifying the UID of the Kolab user %s. No such user."),
-                            $params['user']));
+
+            if (isset($params['user'])) {
+                $tmp_server = &Horde_Kolab_Server::factory($driver, $params);
+
+                try {
+                    $uid = $tmp_server->uidForIdOrMail($params['user']);
+                } catch (Horde_Kolab_Server_Exception $e) {
+                    throw new Horde_Kolab_Server_Exception(
+                        sprintf(_("Failed identifying the UID of the Kolab user %s. Error was: %s"),
+                                $params['user'],
+                                $e->getMessage()));
+                }
+                if ($uid === false) {
+                    throw new Horde_Kolab_Server_MissingObjectException(
+                        sprintf(_("Failed identifying the UID of the Kolab user %s. No such user."),
+                                $params['user']));
+                }
+                $params['uid'] = $uid;
+                unset($params['user']);
             }
-            $params['uid'] = $uid;
-        }
 
-        if (!empty($params['write']) && isset($params['host_master'])) {
-            $params['host'] = $params['host_master'];
-        }
+            if (!empty($params['write']) && isset($params['host_master'])) {
+                $params['host'] = $params['host_master'];
+            }
 
-        $sparam         = $params;
-        $sparam['pass'] = isset($sparam['pass']) ? md5($sparam['pass']) : '';
-        ksort($sparam);
-        $signature = serialize(array($driver, $sparam));
-        if (empty($instances[$signature])) {
             $instances[$signature] = &Horde_Kolab_Server::factory($driver,
                                                                   $params);
         }