Commit 2ed50053cea49f3ef8d819077e7b804697317b98

Authored by Etienne Pallier
1 parent a5909c57
Exists in master and in 2 other branches dev, dev-IRAP

bugfix ldap...

Showing 2 changed files with 57 additions and 373 deletions   Show diff stats
README.md
... ... @@ -54,12 +54,12 @@ Logiciel testé et validé sur les configurations suivantes :
54 54 VERSION ACTUELLE
55 55  
56 56 Date: 14/02/2019
57   -Version: 2.10.10.bugfix2
  57 +Version: 2.10.12.bugfix3
58 58 Author: EP
59 59 (version IRAP only) Bugfix LDAP anonyme, refactorisation, et optimisation
60 60  
61 61 - LDAP anonyme se faisait sans vérifier le mot de passe utilisateur !!!
62   - - Optimisation update email sur changement de responsable => LDAP et AJAX inutile, on fait avec un tableau local
  62 + - Optimisation update email sur changement de responsable (dans vues ADD et EDIT) => LDAP et AJAX inutile, on fait avec un tableau local
63 63  
64 64 IMPORTANT:
65 65 - Pour connaitre la version actuelle, taper "./VERSION"
... ...
src/Model/Table/LdapConnectionsTable.php
... ... @@ -29,7 +29,7 @@ class LdapConnectionsTable extends AppTable
29 29 private $bindPass;
30 30 /* fin MCM*/
31 31  
32   - private $LDAP_USED = TRUE;
  32 + private $USE_LDAP = TRUE;
33 33  
34 34 private $fakeLDAPUsers = [];
35 35  
... ... @@ -47,7 +47,7 @@ class LdapConnectionsTable extends AppTable
47 47 public function useLdap()
48 48 {
49 49 $this->checkConfiguration();
50   - return $this->LDAP_USED;
  50 + return $this->USE_LDAP;
51 51 }
52 52  
53 53 private function buildFakeLdapUsers()
... ... @@ -100,14 +100,13 @@ class LdapConnectionsTable extends AppTable
100 100 }
101 101 }
102 102  
103   - /* EP (aout 2017)
104   - * ATTENTION : Utilisateur IMPORTANT.
105   - * Avec cet utilisateur, on simule un utilisateur qui n'est PAS dans la table utilisateurs
106   - * Il devrait donc se voir attribuer un role "Utilisateur" sans pour autant que ça soit écrit dans la table !!!
107   - * login = '_NouvelUtilisateur_username'
108   - * pass = '_NouvelUtilisateur_password'
109   - * $prefix = "_NouvelUtilisateur_";
110   - */
  103 + // EP (aout 2017)
  104 + // ATTENTION : Utilisateur IMPORTANT.
  105 + // Avec cet utilisateur, on simule un utilisateur qui n'est PAS dans la table utilisateurs
  106 + // Il devrait donc se voir attribuer un role "Utilisateur" sans pour autant que ça soit écrit dans la table !!!
  107 + // login = '_NouvelUtilisateur_username'
  108 + // pass = '_NouvelUtilisateur_password'
  109 + // $prefix = "_NouvelUtilisateur_";
111 110 $ldapUsers[] = [
112 111 'sn' => [
113 112 'UTILISATEUR'
... ... @@ -135,15 +134,19 @@ class LdapConnectionsTable extends AppTable
135 134  
136 135 private function checkConfiguration()
137 136 {
138   - $config = TableRegistry::get('Configurations')
139   - ->find()
140   - ->where(['id =' => 1])
  137 + $config = TableRegistry::get('Configurations')->find()
  138 + ->where([
  139 + 'id =' => 1
  140 + ])
141 141 ->first();
142 142  
143   - $this->LDAP_USED = $config->ldap_used ? TRUE : FALSE;
144   - if ( ! $this->LDAP_USED ) {
  143 + $this->USE_LDAP = $config->use_ldap ? TRUE : FALSE;
  144 +
  145 + if (! $this->USE_LDAP) {
  146 + //$this->authenticationType = $config->authentificationType_ldap;
145 147 $this->authenticationType = $config->ldap_authenticationType;
146   - if (empty($this->fakeLDAPUsers)) $this->fakeLDAPUsers = $this->buildFakeLdapUsers();
  148 + if (empty($this->fakeLDAPUsers))
  149 + $this->fakeLDAPUsers = $this->buildFakeLdapUsers();
147 150 return true;
148 151 }
149 152 // debug($this->fakeLDAPUsers);
... ... @@ -151,6 +154,14 @@ class LdapConnectionsTable extends AppTable
151 154 $ldapConfig = $config->toArray();
152 155  
153 156 if (! empty($config->ldap_host) && ! empty($config->ldap_port) && ! empty($config->ldap_baseDn) && ! empty($config->ldap_authenticationType) && ! empty($config->ldap_filter)) {
  157 + //if (! empty($config->host_ldap) && ! empty($config->port_ldap) && ! empty($config->baseDn_ldap) && ! empty($config->authentificationType_ldap) && ! empty($config->filter_ldap)) {
  158 + /*
  159 + $this->host = $config->host_ldap;
  160 + $this->port = $config->port_ldap;
  161 + $this->baseDn = $config->baseDn_ldap;
  162 + $this->filter = $config->filter_ldap;
  163 + $this->authenticationType = $config->authentificationType_ldap;
  164 + */
154 165 $this->host = $config->ldap_host;
155 166 $this->port = $config->ldap_port;
156 167 $this->baseDn = $config->ldap_baseDn;
... ... @@ -163,7 +174,7 @@ class LdapConnectionsTable extends AppTable
163 174 return true;
164 175 }
165 176  
166   - throw new Exception('The LDAP configuration is not valid : <br />
  177 + throw new Exception('The ldap configuration is not valid : <br />
167 178 <ul>
168 179 <li>host = ' . @$ldapConfig['host'] . '</li>
169 180 <li>port = ' . @$ldapConfig['port'] . '</li>
... ... @@ -173,90 +184,28 @@ class LdapConnectionsTable extends AppTable
173 184 </ul>');
174 185 }
175 186  
176   -
177   -
178   - // REAL LDAP only
179   - /**
180   - * @return array or boolean : all users from DB (CACHE of the LDAP) or FALSE (if table emtpy or expired data)
181   - */
182   - private function fetchAllUsersFromDB() {
183   - // On remet à jour tous les 7 jours
184   - $PEREMPTION_NB_DAYS = 7;
185   -
186   - // Doit aussi retourner FALSE si la ligne FAKE de la table users
187   - // (celle qui contient le user_name "FAKE_USER")
188   - // a une date "updated" périmée (now - updated > $PEREMPTION_NB_DAYS)
189   - // (update automatique de tous les users, chaque semaine, pour rester synced avec le LDAP)
190   - // By default, no user in CACHE
191   - return FALSE;
192   - }
193   -
194   - // REAL LDAP only
195   - // Sauvegarde de tous les users du LDAP en BD (avec un rythme de mise à jour hebdo)
196   - // Seulement les champs: nom, pnom, login, pass, email, create, updated, profile
197   - private function saveAllUsersInDB($users_fetched) {
198   -
199   - // START TRANSACTION
200   - // 1) Update (ou création) de la ligne FAKE (contient le user_name "FAKE_USER") => avec une date "updated"
201   - // 2) Update (ou création) de chaque user contenu dans $users_fetched
202   - // Attention à ne pas perdre l'attribut "profile", surtout pour les users privilégiés!!! (les autres ont un profile = "Utilisateur")
203   - // END TRANSACTION (COMMIT)
204   -
205   - // SAVE s'est bien passé
206   - return TRUE;
207   - }
208   -
209   - /**
210   - * @return $users_fetched or FALSE
211   - */
212   - // REAL or FAKE LDAP
213 187 public function getAllLdapUsers()
214 188 {
215 189 try {
216 190 if ($this->checkConfiguration()) {
217   -
218 191 // REAL LDAP
219   - if ($this->LDAP_USED) {
220   -
221   - // 1) Search users in CACHE (DB)
222   - $users_fetched = $this->fetchAllUsersFromDB();
223   -
224   - // 2) Not found in CACHE, so search users in LDAP
225   - if ($users_fetched === FALSE) {
226   - $users_fetched = $this->searchLdap($this->filter, []);
227   - // CACHE the new user in DB for next time
228   - if ($users_fetched != FALSE) $this->saveAllUsersInDB($users_fetched);
229   - }
230   - /*
  192 + if ($this->USE_LDAP) {
231 193 $ldapConnection = ldap_connect($this->host, $this->port);
232 194 ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
233 195  
234   - // Binding optionnel
235   - if ($this->ldap_authentified) $ldapbind = ldap_bind($ldapConnection, $this->bindDn, $this->bindPass)
236   - or die("Could not bind to LDAP server.". ldap_error($ldapConnection) );
237   -
238 196 $results = ldap_search($ldapConnection, $this->baseDn, $this->filter);
239 197  
240 198 $res = ldap_get_entries($ldapConnection, $results);
241   - */
242   - }
243   -
244   - // FAKE LDAP
  199 + } // FAKE LDAP
245 200 else {
246   - $users_fetched = $this->fakeLDAPUsers;
  201 + $res = $this->fakeLDAPUsers;
247 202 }
248   -
249   - // Noter que $user_fetched peut etre egal a FALSE (si rien trouvé)
250   - return $users_fetched;
  203 + return $res;
251 204 }
252 205 } catch (Exception $e) {}
253   -
254   - // Pb, rien trouvé
255   - return FALSE;
  206 + return false;
256 207 }
257   -
258 208  
259   - // TODO: avirer, VIEUX CODE, à remplacer par getLdap1UserOrAllUsersAttributes()
260 209 // $userName = login
261 210 public function getUserAttributes($userName)
262 211 {
... ... @@ -268,80 +217,16 @@ class LdapConnectionsTable extends AppTable
268 217 ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
269 218 $results = ldap_search($ldapConnection, $this->baseDn, '(' . $this->authenticationType . '=' . $userName . ')');
270 219 return ldap_get_entries($ldapConnection, $results);
271   - }
272   - else {
  220 + } else
273 221 return array(
274 222 $this->getFakeLdapUser($userName)
275 223 );
276   - }
277 224 }
278 225 } catch (Exception $e) {}
279 226  
280 227 return false;
281 228 }
282   -
283   -
284   -
285   - // REAL LDAP only
286   - /*
287   - * @param string $ldapConnection
288   - * @param string $filter
289   - * @param array $just_these
290   - * @param string $userName (= login) => for FAKE LDAP only
291   - * @return $res = ldap search result (1 user or all users attributes) or FALSE
292   - */
293   - //public function getUserAttributes($userName, $ldapConnection='', $filter='', $just_these=[])
294   - //public function getUserAttributes($ldapConnection='', $filter='', $just_these=[], $userName=NULL)
295   - //public function getLdapUsersAttributes($ldapConnection, $filter='', $just_these=[])
296   - public function getLdap1UserOrAllUsersAttributes($ldapConnection, $filter='', $just_these=[])
297   - {
298   - try {
299   - if ($this->checkConfiguration()) {
300   -
301   - // LDAP mode
302   - //if ($this->LDAP_USED) {
303   - /* (EP)
304   - Fonction ldap_search ($link_identifier, $base_dn, $filter, array $attributes = null, $attrsonly = null, $sizelimit = null, $timelimit = null, $deref = null)
305   - Concernant le paramètre $attributes (ici, $just_these) :
306   - - An array of the required attributes, e.g. array("mail", "sn", "cn").
307   - - Note that the "dn" is always returned irrespective of which attributes types are requested.
308   - Telle que notre connexion au LDAP est conçue, on s'attend à recevoir AU MINIMUM
309   - ces attributs dans la réponse de la fonction ldap_search():
310   - - 'sn'
311   - - 'mail'
312   - - 'givenname'
313   - - 'uid'
314   - - 'userpassword'
315   - Pour récupérer tous ces attributs, il ne faut pas utiliser la variable $just_these,
316   - ou alors il faut qu'elle soit égale à un tableau vide ([]).
317   - (par exemple, si elle vaut "['cn']" ça signifie qu'on veut "seulement l'attribut 'cn'")
318   - Quand on n'utilise pas $just_these, la fonction ldap_search() retourne TOUS les attributs disponibles,
319   - donc c'est le comportement qu'on veut ici.
320   - */
321   -
322   - //$search = $this->getUserAttributes($ldapConnection, $filter, $just_these, $user_login);
323   - //$results = ldap_search($ldapConnection, $this->baseDn, $this->filter);
324   -
325   - $results = ldap_search($ldapConnection, $this->baseDn, $filter, $just_these)
326   - or die("Could not search to LDAP server response was: " . ldap_error($ldapConnection) );
327   - $res = ldap_get_entries($ldapConnection, $results);
328   - //echo $info["count"]." entries returned\n";
329   - return $res;
330   - //}
331   -
332   - // FAKE LDAP mode
333   - //else return array( $this->getFakeLdapUser($userName) );
334   - //else return $this->fakeLDAPUsers;
335   -
336   - }
337   - } catch (Exception $e) {
338   - echo 'Exception LDAP : ', $e->getMessage(), "\n";
339   - }
340   -
341   - return false;
342   - }
343   -
344   -
  229 +
345 230 public function getAuthenticationType()
346 231 {
347 232 return $this->authenticationType;
... ... @@ -357,62 +242,26 @@ class LdapConnectionsTable extends AppTable
357 242 return FALSE;
358 243 }
359 244  
360   - // TODO: à implémenter
361   - public function getUsersWithNameAndEmail() {
362   - $usersWithNameAndEmail = [];
363   - // Get all users (with ALL their attributes)
364   - $u = $this->getAllLdapUsers();
365   - // Sort users
366   - //sort($u);
367   - //debug($u);
368   - // (EP) Refactorisation pour éviter code redondant ci-dessous, c'était pourtant pas compliqué, poil dans la main...
369   - $nb_users = $this->LDAP_USED ? $u['count'] : sizeof($u)-1;
370   - for ($i = 0; $i < $nb_users; $i ++)
371   - // $utilisateurs["Pallier Etienne"] = ["email"]
372   - $usersWithNameAndEmail[ $u[$i]['sn'][0].' '.$u[$i]['givenname'][0] ] = $u[$i]['mail'][0];
373   - //debug($usersWithNameAndEmail);
374   - // Sort users (without modifying the keys, don't use sort() but asort() !!!!!!!!!!!!!)
375   - ksort($usersWithNameAndEmail);
376   - return $usersWithNameAndEmail;
377   - }
378   -
379   -
380 245 /**
381 246 * Return a list of Users with key = username & value = username
382 247 */
383 248 public function getListUsers()
384 249 {
385   - $utilisateurs = [];
386   -
387   - // Get all users (with ALL their attributes)
388 250 $u = $this->getAllLdapUsers();
389   - // Sort users
390   - //sort($u);
391   - //debug($u);
  251 + $utilisateurs = [];
392 252  
393   - // (EP) Refactorisation pour éviter code redondant ci-dessous, c'était pourtant pas compliqué, poil dans la main...
394   - $nb_users = $this->LDAP_USED ? $u['count'] : sizeof($u)-1;
395   - for ($i = 0; $i < $nb_users; $i ++)
396   - // $utilisateurs["Pallier Etienne"] = "Pallier Etienne"
397   - $utilisateurs[ $u[$i]['sn'][0].' '.$u[$i]['givenname'][0] ] = $u[$i]['sn'][0].' '.$u[$i]['givenname'][0];
398   - /*
399   - if ($this->LDAP_USED) {
  253 + if ($this->USE_LDAP) {
400 254 for ($i = 0; $i < $u['count']; $i ++) {
401   - $utilisateurs[ $u[$i]['sn'][0].' '.$u[$i]['givenname'][0] ] = $u[$i]['sn'][0].' '.$u[$i]['givenname'][0];
  255 + $utilisateurs[$u[$i]['sn'][0] . ' ' . $u[$i]['givenname'][0]] = $u[$i]['sn'][0] . ' ' . $u[$i]['givenname'][0];
402 256 }
403 257 } else {
404 258 for ($i = 0; $i < sizeof($u) - 1; $i ++) {
405   - $utilisateurs[ $u[$i]['sn'][0].' '.$u[$i]['givenname'][0] ] = $u[$i]['sn'][0].' '.$u[$i]['givenname'][0];
  259 + $utilisateurs[$u[$i]['sn'][0] . ' ' . $u[$i]['givenname'][0]] = $u[$i]['sn'][0] . ' ' . $u[$i]['givenname'][0];
406 260 }
407 261 }
408   - */
409   - //debug($utilisateurs);
410   - // Sort users (without modifying the keys, don't use sort() but asort() !!!!!!!!!!!!!)
411   - asort($utilisateurs);
412   - //debug($utilisateurs);
  262 +
413 263 return $utilisateurs;
414 264 }
415   -
416 265  
417 266 /**
418 267 * Return a list of login ofUsers with key = username & value = login
... ... @@ -422,7 +271,7 @@ class LdapConnectionsTable extends AppTable
422 271 $u = $this->getAllLdapUsers();
423 272 $utilisateurs = [];
424 273  
425   - if ($this->LDAP_USED) {
  274 + if ($this->USE_LDAP) {
426 275 for ($i = 0; $i < $u['count']; $i ++) {
427 276 $utilisateurs[$u[$i]['sn'][0] . ' ' . $u[$i]['givenname'][0]] = $u[$i][$this->authenticationType][0];
428 277 }
... ... @@ -443,7 +292,7 @@ class LdapConnectionsTable extends AppTable
443 292 $u = $this->getAllLdapUsers();
444 293 $utilisateurs = [];
445 294  
446   - if ($this->LDAP_USED) {
  295 + if ($this->USE_LDAP) {
447 296 for ($i = 0; $i < $u['count']; $i ++) {
448 297 if (isset($u[$i]['mail'][0])) {
449 298 $utilisateurs[$u[$i]['sn'][0] . ' ' . $u[$i]['givenname'][0]] = $u[$i]['mail'][0];
... ... @@ -467,7 +316,7 @@ class LdapConnectionsTable extends AppTable
467 316 {
468 317 $u = $this->getAllLdapUsers();
469 318  
470   - if ($this->LDAP_USED) {
  319 + if ($this->USE_LDAP) {
471 320 $nbUsers = $u['count'];
472 321 } else {
473 322 $nbUsers = sizeof($u) - 1;
... ... @@ -485,181 +334,25 @@ class LdapConnectionsTable extends AppTable
485 334 ];
486 335 }
487 336  
488   -
489   - // TODO: implement
490   - // REAL LDAP only
491   - private function checkAndFetchUserFromDB($user_login, $user_password) {
492   - // Doit aussi return false si ce user_login est "périmé" (sa date "created" est > 2 mois par exemple),
493   - // ce qui obligera à relire ses données dans le LDAP et donc se mettre à jour
494   - // By default, user is not in DB
495   - return FALSE;
496   - }
497   -
498   -
499   - // REAL LDAP only
500   - private function searchLdap($filter, $just_these, $user_login=NULL, $user_password=NULL) {
501   -
502   - // CONNEXION
503   - $ldapConnection = ldap_connect($this->host, $this->port)
504   - or die("Could not connect to $this->host (port $this->port)");
505   -
506   - if ($ldapConnection) {
507   -
508   - // OPTIONS
509   - ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
510   -
511   - // BINDING
512   -
513   - // - Authentified
514   - if ($this->ldap_authentified)
515   - $ldapbind = ldap_bind($ldapConnection, $this->bindDn, $this->bindPass); // or die("Could not bind to LDAP server.". ldap_error($ldapConnection) );
516   -
517   - // - Anonymous
518   - // En cas de LDAP anonyme, binding quand même pour vérifier le mot de passe de l'utilisateur.
519   - // Sans cette ligne, on passe avec n'importe quel password !!!
520   - else {
521   - $ldapbind = TRUE;
522   - debug("log, pass= " . $user_login . ' ' . $user_password);
523   - if ($user_login && $user_password) $ldapbind = ldap_bind($ldapConnection, $this->authenticationType.'='.$user_login, $user_password);
524   - debug("ldapbind " . $ldapbind);
525   - }
526   -
527   - // SEARCH
528   - if ($ldapbind) {
529   - //$search = $this->getLdapUserAttributes($ldapConnection, $filter, $just_these, $user_login);
530   - $search = $this->getLdap1UserOrAllUsersAttributes($ldapConnection, $filter, $just_these);
531   - if ($search === false) die("Could not get user attributes from LDAP server, response was: " . ldap_error($ldapConnection) );
532   - //return $search[0];
533   - return $search;
534   - }
535   -
536   - }
537   -
538   - // Il y a eu un pb, utilisateur non reconnu
539   - return FALSE;
540   -
541   - }
542   -
543   -
544   - // REAL LDAP only
545   - private function checkAndFetchUserFromLdap($user_login, $user_password) {
546   - // Set LDAP parameters
547   - // - Liste des attributs à récupérer dans le ldap (vide = TOUS les attributs)
548   - $just_these = [];
549   - // TODO: vérifier si cette ligne est bien utile ou pas... (avant on faisait ça)
550   - if (! $this->ldap_authentified) $just_these = array("cn");
551   -
552   - /* Examples :
553   - *
554   - * - ANONYMOUS LDAP (IRAP) :
555   - * $this->authenticationType = 'uid'
556   - * $this->baseDn = "ou=users,dc=irap,dc=omp,dc=eu"
557   - *
558   - * - AUTHENTIFIED LDAP connection (CRAL) :
559   - * $this->authenticationType = 'sAMAccountName'
560   - * $this->baseDn = "dc=univ-lyon1,dc=fr"
561   - * $binddn="CN=svc_ldap_cral,OU=users,OU=27,OU=sim,OU=univ-lyon1,DC=univ-lyon1,DC=fr";
562   - * ($binddn = "CN=svc_ldap_cral,OU=users,OU=27,OU=sim,OU=univ-lyon1,".$this->baseDn;)
563   - * $filter = "(&(objectClass=person)(memberOf:1.2.840.113556.1.4.1941:=cn=ucbl.osu.cral,ou=groups,ou=27,ou=sim,ou=univ-lyon1,dc=univ-lyon1,dc=fr))";
564   - */
565   - // Construction du filtre avec le filtre de la base de données avec un & sur le login de l'utilisateur
566   - // Si aucun filtre n'est défini dans la base de données on aura juste (& ($this->authenticationType=$user_login))
567   - // ex: "(&(objectClass=person)(memberOf:1.2.840.113556.1.4.1941:=cn=ucbl.osu.cral,ou=groups,ou=27,ou=sim,ou=univ-lyon1,dc=univ-lyon1,dc=fr)(sAMAccountName=$user_login))";
568   - $filter = "(&".$this->filter."(".$this->authenticationType . '=' . $user_login."))";
569   -
570   - //TODO: optimisation, refactoriser si comportement général
571   - //$binddn .= ','.$this->baseDn;
572   -
573   - $res = $this->searchLdap($filter, $just_these, $user_login, $user_password);
574   - if ($res != FALSE) return $res[0];
575   -
576   - /*
577   - // CONNEXION
578   - $ldapConnection = ldap_connect($this->host, $this->port)
579   - or die("Could not connect to $this->host (port $this->port)");
580   -
581   - if ($ldapConnection) {
582   -
583   - // OPTIONS
584   - ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
585   -
586   - // BINDING
587   - if ($this->ldap_authentified)
588   - $ldapbind = ldap_bind($ldapConnection, $this->bindDn, $this->bindPass); // or die("Could not bind to LDAP server.". ldap_error($ldapConnection) );
589   - // En cas de LDAP anonyme, binding quand même pour vérifier le mot de passe de l'utilisateur.
590   - // Sans cette ligne, on passe avec n'importe quel password !!!
591   - else
592   - $ldapbind = ldap_bind($ldapConnection, $this->authenticationType.'='.$user_login, $user_password);
593   -
594   - // SEARCH
595   - if ($ldapbind) {
596   - $search = $this->getUserAttributes($user_login, $ldapConnection, $filter, $just_these);
597   - if ($search === false) die("Could not get user attributes from LDAP server, response was: " . ldap_error($ldapConnection) );
598   - return $search[0];
599   - }
600   -
601   - }
602   - */
603   -
604   - // Il y a eu un pb, utilisateur non reconnu
605   - return FALSE;
606   - }
607   -
608   -
609   - // TODO: implement
610   - private function saveNewUserInDB($user_fetched) {
611   - // SAVE new user in DB
612   - return TRUE;
613   - }
614   -
615   -
616   -
617   - /*
618   - * @param string $user_login
619   - * @param string $user_password
620   - * @return logged user LDAP attributes or FALSE if user not found in LDAP
621   - */
622   - public function ldapAuthentication($user_login, $user_password) {
623   -
  337 + public function ldapAuthentication($login, $password)
  338 + {
624 339 try {
625 340 if ($this->checkConfiguration()) {
626 341  
627   - // REAL LDAP
628   - if ($this->LDAP_USED) {
629   -
630   - // No connexion allowed without password
631   - if (strlen(trim($user_password)) == 0) return FALSE;
632   -
633   - // VIEUX CODE QUI MARCHE !!!
  342 + if ($this->USE_LDAP) {
  343 + if (strlen(trim($password)) == 0)
  344 + return FALSE;
634 345 $ldapConnection = ldap_connect($this->host, $this->port);
635 346 ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
636   - if (@ldap_bind($ldapConnection, $this->authenticationType . '=' . $user_login . ',' . $this->baseDn, $user_password)) {
637   - return $this->getUserAttributes($user_login)[0];
  347 + if (@ldap_bind($ldapConnection, $this->authenticationType . '=' . $login . ',' . $this->baseDn, $password)) {
  348 + return $this->getUserAttributes($login)[0];
638 349 /*
639 350 * } else {
640 351 * return false;
641 352 */
642 353 }
643   -
644   - /* NEW CODE QUI MARCHE PAS
645   - // TODO: optimisation possible
646   - // 1) Search user in CACHE (DB)
647   - $user_fetched = $this->checkAndFetchUserFromDB($user_login, $user_password);
648   - // 2) If not CACHED, search user in LDAP
649   - if ($user_fetched === FALSE) {
650   - $user_fetched = $this->checkAndFetchUserFromLdap($user_login, $user_password);
651   - // CACHE the new user in DB for next time
652   - if ($user_fetched != FALSE) $this->saveNewUserInDB($user_fetched);
653   - }
654   - return $user_fetched; // Noter que $user_fetched peut etre egal a FALSE (si pas trouvé)
655   - */
656   - }
657   -
658   - // FAKE LDAP
659   - else {
660   - //debug($this->USE_LDAP);
661   - //debug($this->baseDn);
662   - $user = $this->getFakeLdapUser($user_login);
  354 + } else {
  355 + $user = $this->getFakeLdapUser($login);
663 356 // debug($user);
664 357 if ($user === false)
665 358 return FALSE;
... ... @@ -668,22 +361,13 @@ class LdapConnectionsTable extends AppTable
668 361 // if ($user[$this->authenticationType][0] == "_NouvelUtilisateur_username" && $user['userpassword'][0] == "_NouvelUtilisateur_password") return $user;
669 362 if ($user[$this->authenticationType][0] == $this->getTheFakeLdapUser()['login'] && $user['userpassword'][0] == $this->getTheFakeLdapUser()['pass'])
670 363 return $user;
671   - if ( (new DefaultPasswordHasher())->check($user_password,$user['userpassword'][0]) )
  364 + if ((new DefaultPasswordHasher())->check($password, $user['userpassword'][0]))
672 365 return $user;
673 366 // if ($user != false && $user['userpassword'][0] == $password) {
674 367 }
675   -
676 368 }
677   -
678   - } catch (Exception $e) {
679   - //echo 'Exception LDAP : ', $e->getMessage(), "\n";
680   - }
681   - // Il y a eu un problème, l'utilisateur n'est pas reconnu
  369 + } catch (Exception $e) {}
682 370 return FALSE;
683   -
684   - } // end ldapAuthentication()
685   -
686   -
687   -
  371 + }
688 372 }
689 373 ?>
690 374 \ No newline at end of file
... ...