Projet

Général

Profil

Development #27147

backend_ldap: ne pas prêter attention à la casse de l'external_id lors de la synchro des comptes

Ajouté par Serghei Mihai (congés, retour 15/05) il y a plus de 5 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Catégorie:
-
Version cible:
-
Début:
09 octobre 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

Révision d90e0600 (diff)
Ajouté par Serghei Mihai (congés, retour 15/05) il y a plus de 5 ans

ldap: add external_id's case-insensitive comparison (#27147)

Historique

#1

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
#2

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 ?

#3

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).

#4

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.

#5

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}})

#6

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.

#7

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

#8

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.

#10

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a plus de 5 ans

#11

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 ?

#12

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.

#13

Mis à jour par Thomas Noël il y a plus de 5 ans

Ça roule. Une option bizarre de moins, c'est bien aussi :)

#14

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

#15

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.

#16

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.

#17

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.

#18

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)
#20

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF