Bonjour,
pouvez vous tester avec un patch plus simple qui consiste à commenter la
ligne :
unset($dynamic_profiles[$keydb]);
On ne supprime pas les droits déjà en base quand on en trouve un, ce qui
pose problème effectivement si on se retrouve avec 2 éléments identiques
retournées par les règles.
Cordialement,
Julien Dombre
Le 03/03/2014 17:09, regis a écrit :
Bonjour,
Je constate un bug assez embêtant sur la dernière version stable de
GLPI (depuis au moins la version 0.83, mais le bug n'existait pas en
0.71 par exemple) : lorsqu'un utilisateur match plusieurs règles
d'affectation de droits qui aboutissent exactement sur les mêmes
droits (affectation du même triplet entité/profil/récursivité), ce
droit supplémentaire est ajouté à l'utilisateur alors qu'il existe déjà.
Je me retrouve donc avec certains utilisateurs qui ont 900
affectations identiques (comme chaque jour j'ai le script
ldap_mass_sync.php qui se lance et synchronise les droits).
J'ai trouvé le bug dans GLPI qui cause ceci : on a une double boucle
qui parcourt les droits à affecter (basés sur les règles définies dans
la config de GLPI) puis une seconde qui parcours les droits actuels de
l'utilisateur (en base de données). Lorsque les triplets sont
identiques à l'intérieur de cette double boucle, on supprime les index
des 2 tableaux parcourus par chaque boucle.
Le problème est que si on a des règles qui valident le même triplet
entité/profil/récursivité, on va avoir plusieurs fois ce triplet dans
la boucle extérieure. Au premier triplet qui se présente, on supprime
tous les triplets qui matchent dans le tableau qui provient de la BDD.
Le tableau de la BDD n'a maintenant plus aucun triplet identique. Or
ensuite on continue de parcourir le tableau des droits provenant des
règles, qui contient lui potentiellement d'autres triplets identiques.
Comme maintenant ces triplets n'existent plus dans la BDD, GLPI se dit
qu'il faut les ajouter à l'utilisateur. Et voilà comment GLPI remplit
la BDD de doublons (avec autant de doublons à chaque synchro qu'il y a
de règles qui aboutissent sur le même triplet).
Le correctif que j'ai utilisé est simplement d'inverser les boucles :
comme on ajoute uniquement que les triplets qui n'existent pas déjà en
base, si on parcourt en premier les triplets en base en supprimant
ceux provenant des règles, on est sûr de n'ajouter que les triplets
manquants.
Je vous joints mon patch qui corrige donc ce problème.
Au passage, dans ces boucles, la variable $found semble ne servir à
rien...
Cordialement
Régis Damongeot
_______________________________________________
Glpi-dev mailing list
Glpi-dev@gna.org
https://mail.gna.org/listinfo/glpi-dev
_______________________________________________
Glpi-dev mailing list
Glpi-dev@gna.org
https://mail.gna.org/listinfo/glpi-dev