Development #27147
backend_ldap: ne pas prêter attention à la casse de l'external_id lors de la synchro des comptes
0%
Description
Si l'element servant à la construction de l'external_id change dans l'annuaire (passage de minuscules en majuscules) un compte doublon sera créé dans la base des comptes.
On devrait compater l'external_id lors de la synchro independamment de la casse.
Fichiers
Révisions associées
Historique
Mis à jour par Paul Marillonnet il y a plus de 5 ans
- Sujet changé de backend_ldap: ne pas prêter attention à la case de l'external_id lors de la synchro des comptes à backend_ldap: ne pas prêter attention à la casse de l'external_id lors de la synchro des comptes
Mis à jour par Thomas Noël il y a plus de 5 ans
Mais ça arrive quand, ça ? Un ordinateur qui décide tout seul de changer de casse ?
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a plus de 5 ans
Constaté dans #27039. L'uid de l'usager était en minuscules, ensuite changé en majuscules dans l'annuaire (à priori).
Mis à jour par Frédéric Péters il y a plus de 5 ans
Oui mais à ce compte-là, on pourrait aussi dire de ne pas faire gaffe aux points, sur l'idée que dans l'annuaire frederic.peters pourrait être remplacé par fredericpeters. Et puis il pourrait être remplacé par fpeters et donc il faudrait gérer aussi un changement qui verrait un nom remplacé par une initiale. Puis gérer la possibilité que les initiales du prénom soient déplacées à fin. Etc.
Plus simple de figer la règle comme quoi la clé ne doit pas bouger.
Mis à jour par Thomas Noël il y a plus de 5 ans
Frédéric Péters a écrit :
Plus simple de figer la règle comme quoi la clé ne doit pas bouger.
Oui. Ca a bougé pour une raison sur #27039, c'est ça qu'il faut bien comprendre avant de voir si on doit proposer un contournement.
S'il fallait un patch, ça serait d'avoir dans la config du backend LDAP la possibilité de dire un filtre Django (ou autre mécanisme) à appliquer sur l'id pour le rendre "unique même quand l'annuaire fait du n'importe quoi" (genre ici, {{id|lower}}
)
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
Il y a quand même une logique, la plupart du temps on construit l'external_id à partir de sAMAccountName ou uid qui sont toux deux insensibles à la casse d'après les schémas LDAP:
#olcAttributeTypes:·(·0.9.2342.19200300.100.1.1¶ #→ NAME·(·'uid'·'userid'·)¶ #→ DESC·'RFC1274:·user·identifier'¶ #→ EQUALITY·caseIgnoreMatch¶ #→ SUBSTR·caseIgnoreSubstringsMatch¶ #→ SYNTAX·1.3.6.1.4.1.1466.115.121.1.15{256}·)¶ #¶
Ce n'est pas déconnant de les comparer en ignorant la casse (par contre un point en plus ce n'est pas le même uid, qu'ils aillent manger du foin).
Ma suggestion par Jabber à Serghei c'était non pas de modifier le comportement par défaut mais j'ajouter une option "external_id_use_iexact": False
qui permettra d'indiquer quand on veut les rechercher via __iexact
plutôt que par la recherche normale __excact
.
Mis à jour par Thomas Noël il y a plus de 5 ans
Benjamin Dauvergne a écrit :
Il y a quand même une logique, la plupart du temps on construit l'external_id à partir de sAMAccountName ou uid qui sont toux deux insensibles à la casse d'après les schémas LDAP: (...)
Ma suggestion par Jabber à Serghei c'était non pas de modifier le comportement par défaut mais j'ajouter une option"external_id_use_iexact": False
qui permettra d'indiquer quand on veut les rechercher via__iexact
plutôt que par la recherche normale__excact
.
D'accord avec ça. Je découvre d'ailleurs que le format de sAMAccountName dans AD est aussi insensible à la casse, c'est un objet String(Unicode)
dans AD, et https://docs.microsoft.com/fr-fr/windows/desktop/ADSchema/s-string-unicode
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
Thomas Noël a écrit :
D'accord avec ça. Je découvre d'ailleurs que le format de sAMAccountName dans AD est aussi insensible à la casse, c'est un objet
String(Unicode)
dans AD, et https://docs.microsoft.com/fr-fr/windows/desktop/ADSchema/s-string-unicode
Quasiment tous les identifiants sont insensibles à la casse sous windows, sans compter les milliers de types de chaîne différents.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a plus de 5 ans
- Fichier 0001-ldap-add-external_id-s-case-insensitive-comparison-2.patch 0001-ldap-add-external_id-s-case-insensitive-comparison-2.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Thomas Noël il y a plus de 5 ans
On parlait plus haut « ajouter une option "external_id_use_iexact" » , je pense que ça reste nécessaire pour les vrais annuaires pas débiles. Ou bien ?
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Solution proposée à Solution validée
Ça me va que la valeur par défaut soit d'utiliser iexact, en prod actuellement je n'ai pas connaissance de cas où on utilise pas sAMAccountName ou uid qui sont tous les deux CI, mais avoir la possibilité de ne pas faire comme ça me semble utile oui, je dirai qu'on peut aussi attendre que le cas se présente et on ajoutera l'option. Le seul autre cas légitime que je vois c'est entryUUID
(ou l'équivalent AD) qui est un uuid qui normalement ne change pas même en cas de renommage de l'uid et c'est pareil c'est une chaîne hexadécimal, c'est CI.
Mis à jour par Thomas Noël il y a plus de 5 ans
Ça roule. Une option bizarre de moins, c'est bien aussi :)
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a plus de 5 ans
- Assigné à mis à Serghei Mihai (congés, retour 15/05)
Je ne voulais pas non plus rajouter une n-ième option de la conf LDAP.
Poussé dans la branche wip/ldap-case-insensitive-external-id
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
Il faut mettre les numéro des tickets en début du nom de branche, ça affiche le statut ici.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a plus de 5 ans
C'est ce que je cherchais, merci.
Je saurais pour les prochaines fois.
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
Le build a foiré mais c'est un test de perf à la con dans la partie RBAC, tu peux ignorer.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a plus de 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit d90e060069dc89026c279777bb39ed24d634f397 (origin/master, origin/HEAD) Author: Serghei Mihai <smihai@entrouvert.com> Date: Thu Oct 25 23:36:43 2018 +0200 ldap: add external_id's case-insensitive comparison (#27147)
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Fermé
ldap: add external_id's case-insensitive comparison (#27147)