From 49f325e20691e5a115b73f925b799b544541284a Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Sat, 23 Feb 2019 00:35:22 +0100 Subject: [PATCH] LDAP refactorisation && optimisation (5) --- README.md | 10 ++++------ src/Model/Table/LdapConnectionsTable.php | 77 +++++++++++++++++++++++++++++++++++++++++++++++------------------------------ 2 files changed, 51 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index ff4d4b4..16ccc67 100644 --- a/README.md +++ b/README.md @@ -53,13 +53,11 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 22/02/2019 -Version: 2.10.18 +Date: 25/02/2019 +Version: 2.10.19 Author: EP - LDAP refactorisation && optimisation (4) - - LdapConnectionsTable.php/searchLdap() simplification : - - suppression getUserAttributes() - - suppression getLdap1UserOrAllUsersAttributes() + LDAP refactorisation && optimisation (5) + - LdapConnectionsTable.php/getAllLdapUsers() remplacé par getAllLdapUsersNEW - LDAP refactor progressif pour remettre le mode LDAP authentifié (pour CRAL) IMPORTANT: diff --git a/src/Model/Table/LdapConnectionsTable.php b/src/Model/Table/LdapConnectionsTable.php index 027098e..dc11bff 100755 --- a/src/Model/Table/LdapConnectionsTable.php +++ b/src/Model/Table/LdapConnectionsTable.php @@ -8,9 +8,12 @@ DONE: - 1) remplacer ldapAuthentication() par ldapAuthenticationNEW() - 2) remplacer getUserAttributes() par getLdap1UserOrAllUsersAttributes() - 3) virer getLdap1UserOrAllUsersAttributes() et merger son code dans la seule fonction qui l'appelle : searchLdap() +- 4) virer getUserAttributes() et getLdap1UserOrAllUsersAttributes() + +- 5) getAllLdapUsersNEW() pour remplacer getAllLdapUsers() TODO: -- 4) getAllLdapUsersNEW() pour remplacer getAllLdapUsers() +- ajouter just_these ? - TableRegistry::get() à remplacer par TableRegistry::getTableLocator()->get() * @@ -231,7 +234,7 @@ class LdapConnectionsTable extends AppTable * @return $users_fetched or FALSE */ // REAL or FAKE LDAP - public function getAllLdapUsers() + public function getAllLdapUsersOLD() { try { if ($this->checkConfiguration()) { @@ -261,7 +264,7 @@ class LdapConnectionsTable extends AppTable * @return $users_fetched or FALSE */ // REAL or FAKE LDAP - public function getAllLdapUsersNEW() + public function getAllLdapUsers() { try { if ($this->checkConfiguration()) { @@ -300,7 +303,7 @@ class LdapConnectionsTable extends AppTable // Noter que $user_fetched peut etre egal a FALSE (si rien trouvé) return $users_fetched; } - } + } catch (Exception $e) {} // Pb, rien trouvé @@ -309,7 +312,7 @@ class LdapConnectionsTable extends AppTable - + /* // REAL LDAP only // TODO: avirer, VIEUX CODE, à remplacer par getLdap1UserOrAllUsersAttributes() // $userName = login @@ -323,33 +326,32 @@ class LdapConnectionsTable extends AppTable //ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3); $results = ldap_search($ldapConnection, $this->baseDn, '(' . $this->authenticationType . '=' . $userName . ')'); return ldap_get_entries($ldapConnection, $results); - /* + /STAR } else return array( $this->getFakeLdapUser($userName) ); - */ + STAR/ } } catch (Exception $e) {} return false; } + */ /* - CALL - $filter = "(&".$this->filter."(".$this->authenticationType . '=' . $user_login."))"; - */ + //CALL : $filter = "(&".$this->filter."(".$this->authenticationType . '=' . $user_login."))"; // REAL LDAP only - /* + /ST * @param string $ldapConnection * @param string $filter * @param array $just_these * @param string $userName (= login) => for FAKE LDAP only * @return $res = ldap search result (1 user or all users attributes) or FALSE - */ + ST/ //public function getUserAttributes($userName, $ldapConnection='', $filter='', $just_these=[]) //public function getUserAttributes($ldapConnection='', $filter='', $just_these=[], $userName=NULL) //public function getLdapUsersAttributes($ldapConnection, $filter='', $just_these=[]) @@ -360,7 +362,7 @@ class LdapConnectionsTable extends AppTable // LDAP mode //if ($this->LDAP_USED) { - /* (EP) + /ST (EP) Fonction ldap_search ($link_identifier, $base_dn, $filter, array $attributes = null, $attrsonly = null, $sizelimit = null, $timelimit = null, $deref = null) Concernant le paramètre $attributes (ici, $just_these) : - An array of the required attributes, e.g. array("mail", "sn", "cn"). @@ -377,7 +379,7 @@ class LdapConnectionsTable extends AppTable (par exemple, si elle vaut "['cn']" ça signifie qu'on veut "seulement l'attribut 'cn'") Quand on n'utilise pas $just_these, la fonction ldap_search() retourne TOUS les attributs disponibles, donc c'est le comportement qu'on veut ici. - */ + ST/ //$ldapConnection = ldap_connect($this->host, $this->port); //ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3); @@ -385,12 +387,12 @@ class LdapConnectionsTable extends AppTable // NEW: $filter = "(&".$this->filter."(".$this->authenticationType . '=' . $user_login."))"; // OLD à virer - /* + /ST $filter = '(' . $this->authenticationType . '=' . $user_login . ')'; $just_these = []; $results = ldap_search($ldapConnection, $this->baseDn, $filter); return ldap_get_entries($ldapConnection, $results); - */ + ST/ // $filter = "(&".$this->filter. "(".$this->authenticationType . '=' . $user_login."))"; $results = ldap_search($ldapConnection, $this->baseDn, $filter, $just_these) @@ -411,6 +413,7 @@ class LdapConnectionsTable extends AppTable return false; } + */ @@ -576,10 +579,18 @@ class LdapConnectionsTable extends AppTable /* * OLD CODE QUI MARCHE + $ldapConnection = ldap_connect($this->host, $this->port); ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3); + + - From ldapAuthentication(): if (@ldap_bind($ldapConnection, $this->authenticationType . '=' . $user_login . ',' . $this->baseDn, $user_password)) return $this->getUserAttributes($user_login)[0]; + + - From getUserAttributes(): + $results = ldap_search($ldapConnection, $this->baseDn, $this->filter); + $search = ldap_get_entries($ldapConnection, $results); + */ // CONNEXION @@ -593,20 +604,26 @@ class LdapConnectionsTable extends AppTable // BINDING - // - Authentified - if ($this->ldap_authentified) $ldapbind = ldap_bind($ldapConnection, $this->bindDn, $this->bindPass); - // or die("Could not bind to LDAP server.". ldap_error($ldapConnection) ); - - // - Anonymous - // En cas de LDAP anonyme, binding quand même pour vérifier le mot de passe de l'utilisateur. - // Sans cette ligne, on passe avec n'importe quel password !!! - else { - $ldapbind = TRUE; - // function ldap_bind ($link_identifier, $bind_rdn = null, $bind_password = null) - //debug("log, pass= " . $user_login . ' ' . $user_password); - //if ($user_login && $user_password) $ldapbind = ldap_bind($ldapConnection, $this->authenticationType.'='.$user_login, $user_password); - if ($user_login && $user_password) $ldapbind = ldap_bind($ldapConnection, $this->authenticationType . '=' . $user_login . ',' . $this->baseDn, $user_password); - //debug("ldapbind " . $ldapbind); + $ldapbind = TRUE; + if ($user_login && $user_password) { + // - Authentified + if ($this->ldap_authentified) $ldapbind = ldap_bind($ldapConnection, $this->bindDn, $this->bindPass); + // or die("Could not bind to LDAP server.". ldap_error($ldapConnection) ); + + // - Anonymous + // En cas de LDAP anonyme, binding quand même pour vérifier le mot de passe de l'utilisateur. + // Sans cette ligne, on passe avec n'importe quel password !!! + else $ldapbind = ldap_bind($ldapConnection, $this->authenticationType . '=' . $user_login . ',' . $this->baseDn, $user_password); + /* + else { + $ldapbind = TRUE; + // function ldap_bind ($link_identifier, $bind_rdn = null, $bind_password = null) + //debug("log, pass= " . $user_login . ' ' . $user_password); + //if ($user_login && $user_password) $ldapbind = ldap_bind($ldapConnection, $this->authenticationType.'='.$user_login, $user_password); + if ($user_login && $user_password) $ldapbind = ldap_bind($ldapConnection, $this->authenticationType . '=' . $user_login . ',' . $this->baseDn, $user_password); + //debug("ldapbind " . $ldapbind); + } + */ } // SEARCH -- libgit2 0.21.2