Bug OpenLDAP LDAP Plugin Piwigo : Différence entre versions
m |
(Aucune différence)
|
Version actuelle en date du 20 septembre 2018 à 16:13
Votre avis
Nobody voted on this yet
|
|
Anomalie
Malgré la validation des paramètres, les premières tentatives de connexion avec un compte LDAP n'ont pas permis de rentrer dans l'application. Le problème n'est pas observé lorsqu' aucun groupe n'est spécifié dans les filtres de recherche.
L'étude du code, et plus spécifique du fichier class.ldap.php
va permettre d'identifier le problème. La fonction user_membership
est utilisé afin de valider qu'un utilisateur se trouve dans un groupe. Or cette recherche est effectuée sur l'attribut interne memberUid
contenant uniquement l'identifiant de l'utilisateur.
Or, dans le cadre de cette installation sous OpenLDAP
, cela n'est pas fonctionnel car l'attribut sur les groupes est member
et contient l'identifiant complet du compte.
Modifications
Afin de corriger le problème, le fichier class.ldap.php
est modifié ainsi.
// This function takes the user and check if it is a member of some ldap groups.
// This allows to set that it is allowed to log in, or that it is an admin or a webmaster (see function ldap_status)
public function user_membership($user, $groups){
// $groups is an array of groupdn ! (there is a possibility of several groups, we search the user in each of them).
$userId = $this->config['ld_attr'].'='.$user.','
.(empty($this->config['usersbranch']) ? '' : $this->config['usersbranch'].',')
.(empty($this->config['basedn']) ? '' : $this->config['basedn']);
foreach ($groups as $groupdn) {
$filter = '(objectClass=*)';
// $result = @ldap_read($this->cnx,$groupdn,$filter,array('memberUid'));
$result = @ldap_read($this->cnx,$groupdn,$filter,array('member'));
$result2 = @ldap_get_entries($this->cnx, $result);
// if(isset($result2[0]['memberuid'])){
if(isset($result2[0]['member'])){
// foreach($result2[0]['memberuid'] as $item){
foreach($result2[0]['member'] as $item){
// if ($item == $user){
if ($item == $userId){
return True;
}
}
}
}
return False;
}
L'objectif de cette modification est de construire l'identifiant complet de l'utilisateur qui se connecte avec la racine de recherche, la branche de stockage des utilisateurs et l'identifiant de validation de l'utilisateur.
Puis cette chaîne est validée sur l'attribute member
du groupe.
Attention, cette modification est asez sommaire et ne prend pas forcément en compte les sous branches des groupes. Elle est fonctionnelle dans le cadre de cette installation et l'implémentation de l'annuaire, mais n'est absolument pas générique. Cependant, elle permet d'avoir une idée de la modification à apporter afin de rendre fonctionnel le plugin.
Package installé
Plugin installé: Ldap login plugin Piwigo.tar.gz