--- /dev/null
+--- old/ecrire/auth/ldap.php 2017-06-08 21:58:17.000000000 +0200
++++ new/ecrire/auth/ldap.php 2017-06-10 02:54:02.687954143 +0200
+@@ -171,24 +171,41 @@
+ $desc = isset($ldap['attributes']) && $ldap['attributes'] ? $ldap['attributes'] : $GLOBALS['ldap_attributes'] ;
+
+ $logins = is_array($desc['login']) ? $desc['login'] : array($desc['login']);
++ if (isset($GLOBALS['ldap_search'])) {
++ $search_query = str_replace("%user%", $login_search, $GLOBALS['ldap_search']);
++ $result = @ldap_search($ldap_link, $ldap_base, $search_query, array("dn"));
++ $info = @ldap_get_entries($ldap_link, $result);
++ // Ne pas accepter les resultats si plus d'une entree
++ // (on veut un attribut unique)
+
+- // Tenter une recherche pour essayer de retrouver le DN
+- foreach ($logins as $att) {
+- $result = @ldap_search($ldap_link, $ldap_base, "$att=$login_search", array("dn"));
+- $info = @ldap_get_entries($ldap_link, $result);
+- // Ne pas accepter les resultats si plus d'une entree
+- // (on veut un attribut unique)
++ if (is_array($info) and $info['count'] == 1) {
++ $dn = $info[0]['dn'];
++ if (!$checkpass) {
++ return $dn;
++ }
++ if (@ldap_bind($ldap_link, $dn, $pass)) {
++ return $dn;
++ }
++ }
++ } else {
++ // Tenter une recherche pour essayer de retrouver le DN
++ foreach ($logins as $att) {
++ $result = @ldap_search($ldap_link, $ldap_base, "$att=$login_search", array("dn"));
++ $info = @ldap_get_entries($ldap_link, $result);
++ // Ne pas accepter les resultats si plus d'une entree
++ // (on veut un attribut unique)
+
+- if (is_array($info) and $info['count'] == 1) {
+- $dn = $info[0]['dn'];
+- if (!$checkpass) {
+- return $dn;
+- }
+- if (@ldap_bind($ldap_link, $dn, $pass)) {
+- return $dn;
+- }
+- }
+- }
++ if (is_array($info) and $info['count'] == 1) {
++ $dn = $info[0]['dn'];
++ if (!$checkpass) {
++ return $dn;
++ }
++ if (@ldap_bind($ldap_link, $dn, $pass)) {
++ return $dn;
++ }
++ }
++ }
++ }
+
+ if ($checkpass and !isset($dn)) {
+ // Si echec, essayer de deviner le DN