diff --git a/README.md b/README.md
index df26994..6d39ea1 100644
--- a/README.md
+++ b/README.md
@@ -54,12 +54,10 @@ Logiciel testé et validé sur les configurations suivantes :
VERSION ACTUELLE
Date: 10/01/2019
-Version: 2.9.1.9
+Version: 2.9.1.10
Author: EP
- Ajout du mode ldap authentifié :
- - Attention, modif de la BD, il faut executer le script db-update-2019-01-09.sh ("-CRAL.sh" pour le CRAL)
- - renommé tous les champs et variables *_ldap en ldap_* pour meilleure lisibilité
- - adapté la section LDAP de la config
+ Bugfix et CLEANUP de la gestion du LDAP
+ - bugfix de la section ldap_authentified
Version majeure en cours : 2.9 (https://projects.irap.omp.eu/versions/207)
@@ -75,11 +73,12 @@ CHANGEMENTS IMPORTANTS (MILESTONES)
Liste complète des évolutions: https://gitlab.irap.omp.eu/epallier/labinvent/commits/master
-10/01/2019 Version: 2.9.1.8 (EP)
+10/01/2019 Version: 2.9.1.10 (EP)
Ajout du mode ldap authentifié :
- **Attention, modif de la BD**, il faut executer le script db-update-2019-01-09.sh ("-CRAL.sh" pour le CRAL)
- renommé tous les champs et variables *_ldap en ldap_* pour meilleure lisibilité
- adapté la section LDAP de la config
+ - cleanup
21/12/2018 Version: 2.9.1.4 (EP)
Version et date affichés automatiquement et merge vues listes... :
diff --git a/src/Model/Table/LdapConnectionsTable.php b/src/Model/Table/LdapConnectionsTable.php
index 244609f..f578061 100755
--- a/src/Model/Table/LdapConnectionsTable.php
+++ b/src/Model/Table/LdapConnectionsTable.php
@@ -100,13 +100,14 @@ class LdapConnectionsTable extends AppTable
}
}
- // EP (aout 2017)
- // ATTENTION : Utilisateur IMPORTANT.
- // Avec cet utilisateur, on simule un utilisateur qui n'est PAS dans la table utilisateurs
- // Il devrait donc se voir attribuer un role "Utilisateur" sans pour autant que ça soit écrit dans la table !!!
- // login = '_NouvelUtilisateur_username'
- // pass = '_NouvelUtilisateur_password'
- // $prefix = "_NouvelUtilisateur_";
+ /* EP (aout 2017)
+ * ATTENTION : Utilisateur IMPORTANT.
+ * Avec cet utilisateur, on simule un utilisateur qui n'est PAS dans la table utilisateurs
+ * Il devrait donc se voir attribuer un role "Utilisateur" sans pour autant que ça soit écrit dans la table !!!
+ * login = '_NouvelUtilisateur_username'
+ * pass = '_NouvelUtilisateur_password'
+ * $prefix = "_NouvelUtilisateur_";
+ */
$ldapUsers[] = [
'sn' => [
'UTILISATEUR'
@@ -141,7 +142,10 @@ class LdapConnectionsTable extends AppTable
$this->LDAP_USED = $config->ldap_used ? TRUE : FALSE;
- if (! $this->LDAP_USED) {
+ // TODO: AVIRER !!!
+ $this->LDAP_USED = FALSE;
+
+ if ( ! $this->LDAP_USED ) {
$this->authenticationType = $config->ldap_authenticationType;
if (empty($this->fakeLDAPUsers)) $this->fakeLDAPUsers = $this->buildFakeLdapUsers();
return true;
@@ -156,16 +160,14 @@ class LdapConnectionsTable extends AppTable
$this->baseDn = $config->ldap_baseDn;
$this->filter = $config->ldap_filter;
$this->authenticationType = $config->ldap_authenticationType;
- /*MCM*/
$this->ldap_authentified = $config->ldap_authentified;
$this->bindDn = $config->ldap_bindDn;
$this->bindPass = $config->ldap_bindPass;
- /* fin MCM*/
return true;
}
- throw new Exception('The ldap configuration is not valid :
+ throw new Exception('The LDAP configuration is not valid :
- host = ' . @$ldapConfig['host'] . '
- port = ' . @$ldapConfig['port'] . '
@@ -198,18 +200,18 @@ class LdapConnectionsTable extends AppTable
return false;
}
- // $userName = login
- //public function getUserAttributes($userName, $ldapConnection='', $LDAP_ANONYMOUS=true, $filter='', $just_these=[])
+ /*
+ * @param unknown $userName (= login)
+ * @param string $ldapConnection
+ * @param string $filter
+ * @param array $just_these
+ * @return $info = ldap search result (user attributes) or FALSE
+ */
public function getUserAttributes($userName, $ldapConnection='', $filter='', $just_these=[])
{
try {
-
if ($this->checkConfiguration()) {
if ($this->LDAP_USED) {
- /* Code inutile car redondant:
- $ldapConnection = ldap_connect($this->host, $this->port);
- ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
- */
/* (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) :
@@ -232,12 +234,12 @@ class LdapConnectionsTable extends AppTable
$info = ldap_get_entries($ldapConnection, $results);
//echo $info["count"]." entries returned\n";
return $info;
- } else
- return array(
- $this->getFakeLdapUser($userName)
- );
+ }
+ else return array( $this->getFakeLdapUser($userName) );
}
- } catch (Exception $e) {}
+ } catch (Exception $e) {
+ echo 'Exception LDAP : ', $e->getMessage(), "\n";
+ }
return false;
}
@@ -349,14 +351,17 @@ class LdapConnectionsTable extends AppTable
];
}
- public function ldapAuthentication($user_login, $user_password)
- {
+ /*
+ * @param string $user_login
+ * @param string $user_password
+ * @return logged user LDAP attributes or FALSE if user not found in LDAP
+ */
+ public function ldapAuthentication($user_login, $user_password) {
+
try {
if ($this->checkConfiguration()) {
- // We are using LDAP
- if ($this->LDAP_USED) {
- // CRAL must set this to FALSE
- //$LDAP_ANONYMOUS = TRUE;
+
+ if ($this->LDAP_USED) { // We are using LDAP
// No connexion allowed without password
if (strlen(trim($user_password)) == 0) return FALSE;
@@ -364,81 +369,45 @@ class LdapConnectionsTable extends AppTable
// Set LDAP parameters
// - Liste des attributs à récupérer dans le ldap (vide = TOUS les attributs)
$just_these = [];
-
- /*
- // - Anonymous connection (IRAP, IAS, LATMOS)
- //if ($LDAP_ANONYMOUS) {
- if ($this->anonymous_ldap) {
- ///$auth_dn = ''; //= $this->authDn;
- // $this->authenticationType = 'uid'
- // $this->baseDn = "ou=users,dc=irap,dc=omp,dc=eu"
-
- //TODO: à virer, ca n'est pas nécessaire en anonymous
- $binddn = $this->authenticationType . '=' . $user_login; // ex: uid=epallier
- $ldappass = $user_password;
-
- //$filter = '('.$binddn.')'; // ex: "(uid=epallier)"
- ////$filter = $this->filter . '('.$binddn.')'; // ex: "(uid=epallier)"
- //TODO: refactoriser si comportement général
- ///$binddn .= ','.$this->baseDn;
- }
- // - Authentified connection (CRAL)
- else {
- //$dn = $this->baseDn; // "dc=univ-lyon1,dc=fr"
- //$binddn="CN=svc_ldap_cral,OU=users,OU=27,OU=sim,OU=univ-lyon1,DC=univ-lyon1,DC=fr";
- //$binddn = "CN=svc_ldap_cral,OU=users,OU=27,OU=sim,OU=univ-lyon1,".$dn;
- ///<*> EP version
- $auth_dn = "CN=svc_ldap_cral,OU=users,OU=27,OU=sim,OU=univ-lyon1"; //= $this->authDn;
- $binddn = $auth_dn;
- $ldappass = "lemotdepasse";
- $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))";
- //<*>/
- ///$auth_dn = $this->baseDn; // dc=univ-lyon1,dc=fr
- // $this->authenticationType = 'sAMAccountName'
- // $this->baseDn = "dc=univ-lyon1,dc=fr"
- //$anonymous = $this->anonymous;
- //if ($anonymous == '0') {
- $binddn = $this->bindDn; // CN=svc_ldap_cral,OU=users,OU=27,OU=sim,OU=univ-lyon1,DC=univ-lyon1,DC=fr
- $ldappass = $this->bindPass;
- //}
- //construction du filtre avec le filtre de la base de données avec un & sur le login de l'utilisateur
- //si aucun filtre n'est défini dans la base de données on aura juste (& ($this->authenticationType=$user_login))
- ////$filter = "(&".$this->filter."(".$this->authenticationType . '=' . $user_login."))";
- //$just_these = array("cn");
- ///<*>
- NEW version
- $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)(sAMAccountName=$user_login))";
- $dn = "dc=univ-lyon1,dc=fr";
- $binddn="CN=svc_ldap_cral,OU=users,OU=27,OU=sim,OU=univ-lyon1,DC=univ-lyon1,DC=fr";
- //<*>/
- }
+ //$just_these = array("cn");
+
+ /* Examples :
+ *
+ * - ANONYMOUS LDAP (IRAP) :
+ * $this->authenticationType = 'uid'
+ * $this->baseDn = "ou=users,dc=irap,dc=omp,dc=eu"
+ *
+ * - AUTHENTIFIED LDAP connection (CRAL) :
+ * $this->authenticationType = 'sAMAccountName'
+ * $this->baseDn = "dc=univ-lyon1,dc=fr"
+ * $binddn="CN=svc_ldap_cral,OU=users,OU=27,OU=sim,OU=univ-lyon1,DC=univ-lyon1,DC=fr";
+ * ($binddn = "CN=svc_ldap_cral,OU=users,OU=27,OU=sim,OU=univ-lyon1,".$this->baseDn;)
+ * $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))";
*/
+ // Construction du filtre avec le filtre de la base de données avec un & sur le login de l'utilisateur
+ // Si aucun filtre n'est défini dans la base de données on aura juste (& ($this->authenticationType=$user_login))
+ // 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))";
$filter = "(&".$this->filter."(".$this->authenticationType . '=' . $user_login."))";
- //TODO: optimisation
- /////////$binddn .= ','.$this->baseDn;
+ //TODO: optimisation, refactoriser si comportement général
+ //$binddn .= ','.$this->baseDn;
+
// Connection
$ldapConnection = ldap_connect($this->host, $this->port) or die("Could not connect to $this->host (port $this->port)");
if ($ldapConnection) {
+
ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
- // Binding
- /*MCM*/
- // bind optionnel
+
+ // Binding optionnel
if ($this->ldap_authentified) $ldapbind = ldap_bind($ldapConnection, $this->bindDn, $this->bindPass) or die("Could not bind to LDAP server.". ldap_error($ldapConnection) );
+
$search = $this->getUserAttributes($user_login, $ldapConnection, $filter, $just_these);
- /* fin MCM*/
if ($search === false) die("Could not get user attributes from LDAP server, response was: " . ldap_error($ldapConnection) );
return $search[0];
- /*
- * } else {
- * return false;
- */
- //}
}
-
- // We are not using LDAP (so, use FAKE LDAP instead)
- } else {
+
+ } else { // We are not using LDAP (so, use FAKE LDAP instead)
$user = $this->getFakeLdapUser($user_login);
// debug($user);
if ($user === false)
@@ -452,9 +421,18 @@ class LdapConnectionsTable extends AppTable
return $user;
// if ($user != false && $user['userpassword'][0] == $password) {
}
+
}
- } catch (Exception $e) {}
+
+ } catch (Exception $e) {
+ echo 'Exception LDAP : ', $e->getMessage(), "\n";
+ }
+
return FALSE;
- }
+
+ } // end ldapAuthentication()
+
+
+
}
?>
\ No newline at end of file
diff --git a/src/Template/Configurations/edit.ctp b/src/Template/Configurations/edit.ctp
index 4ad7ac3..0d955fb 100644
--- a/src/Template/Configurations/edit.ctp
+++ b/src/Template/Configurations/edit.ctp
@@ -219,6 +219,9 @@ echo $this->element('menu_form', [