[spip-dev] Connexion de SPIP à un annuaire ActiveDirectory

Je continue ici une discussion entamée sur forums.spip.org :
<http://forum.spip.org/fr_188897.html#forum197273>

Dans auth_ldap.php, si on n'arrive pas à trouver le user par son "uid", on cherche maintenant par son "samaccountname", ce qui est déjà mieux qu'en 1.9.2c :
<http://trac.rezo.net/trac/spip/browser/spip/ecrire/inc/auth_ldap.php#L83>

Par contre, ensuite dans le code, on ne fait toujours référence qu'à l'uid pour récupérer les infos :
<http://trac.rezo.net/trac/spip/browser/spip/ecrire/inc/auth_ldap.php#L98>

Ce qui m'étonne en plus, c'est que la fonction auth_ldap_search() sert justement à déterminer quel champ utiliser pour l'identification, mais elle ne me semble pas utilisée dans auth_ldap_inserer().

Est-ce que ça fonctionne quand même par miracle chez quelqu'un ?

-Nicolas

Tu ne pourrais pas proposer un patch ?

Committo,Ergo:Sum

Je continue ici une discussion entamée sur forums.spip.org :
<http://forum.spip.org/fr_188897.html#forum197273&gt;

Dans auth_ldap.php, si on n'arrive pas à trouver le user par son
"uid", on cherche maintenant par son "samaccountname", ce qui est
déjà mieux qu'en 1.9.2c :
<http://trac.rezo.net/trac/spip/browser/spip/ecrire/inc/
auth_ldap.php#L83>

Par contre, ensuite dans le code, on ne fait toujours référence qu'à
l'uid pour récupérer les infos :
<http://trac.rezo.net/trac/spip/browser/spip/ecrire/inc/
auth_ldap.php#L98>

Tu ne pourrais pas proposer un patch ?

Bin je commence tout juste à trouver où faire des modifs, et encore, sur une 1.9.2c pour l'instant, mais si ça marche un jour, je transmettrais !

Je viens de découvrir par exemple qu'il y a un test sur la recherche avec "uid", et qu'on ne recherche sur "samaccountname" que si ça échoue, or dans mon cas ça n'échoue pas même si je n'ai pas d'uid.

Le problème est que je ne peux tester que sur un ActiveDirectory, donc je risque de faire des modifications qui impactent les utilisateurs de LDAP.

Vu que les deux se comportent vraiment différemment, il serait peut-être judicieux de distinguer les deux. Ou alors, plutôt que chercher au petit bonheur la chance, on pourrait demander lors de l'installation quels sont les champs à mapper sur ceux de SPIP.

-Nicolas

Nicolas Hoizey a écrit :

Je continue ici une discussion entamée sur forums.spip.org :
<http://forum.spip.org/fr_188897.html#forum197273&gt;

Dans auth_ldap.php, si on n'arrive pas à trouver le user par son
"uid", on cherche maintenant par son "samaccountname", ce qui est
déjà mieux qu'en 1.9.2c :
<http://trac.rezo.net/trac/spip/browser/spip/ecrire/inc/
auth_ldap.php#L83>

Par contre, ensuite dans le code, on ne fait toujours référence qu'à
l'uid pour récupérer les infos :
<http://trac.rezo.net/trac/spip/browser/spip/ecrire/inc/
auth_ldap.php#L98>

Tu ne pourrais pas proposer un patch ?

Bin je commence tout juste à trouver où faire des modifs, et encore, sur une 1.9.2c pour l'instant, mais si ça marche un jour, je transmettrais !

Je viens de découvrir par exemple qu'il y a un test sur la recherche avec "uid", et qu'on ne recherche sur "samaccountname" que si ça échoue, or dans mon cas ça n'échoue pas même si je n'ai pas d'uid.

Le problème est que je ne peux tester que sur un ActiveDirectory, donc je risque de faire des modifications qui impactent les utilisateurs de LDAP.

Vu que les deux se comportent vraiment différemment, il serait peut- être judicieux de distinguer les deux. Ou alors, plutôt que chercher au petit bonheur la chance, on pourrait demander lors de l'installation quels sont les champs à mapper sur ceux de SPIP.

-Nicolas

je peux tester sur les deux, mais il n'y a jamais eu de pb avec ldap unix
bonne idée pour la fin

lara a écrit :

Nicolas Hoizey a écrit :

Je continue ici une discussion entamée sur forums.spip.org :
<http://forum.spip.org/fr_188897.html#forum197273&gt;

Dans auth_ldap.php, si on n'arrive pas à trouver le user par son
"uid", on cherche maintenant par son "samaccountname", ce qui est
déjà mieux qu'en 1.9.2c :
<http://trac.rezo.net/trac/spip/browser/spip/ecrire/inc/
auth_ldap.php#L83>

Par contre, ensuite dans le code, on ne fait toujours référence qu'à
l'uid pour récupérer les infos :
<http://trac.rezo.net/trac/spip/browser/spip/ecrire/inc/
auth_ldap.php#L98>

Tu ne pourrais pas proposer un patch ?

Bin je commence tout juste à trouver où faire des modifs, et encore, sur une 1.9.2c pour l'instant, mais si ça marche un jour, je transmettrais !

Je viens de découvrir par exemple qu'il y a un test sur la recherche avec "uid", et qu'on ne recherche sur "samaccountname" que si ça échoue, or dans mon cas ça n'échoue pas même si je n'ai pas d'uid.

Le problème est que je ne peux tester que sur un ActiveDirectory, donc je risque de faire des modifications qui impactent les utilisateurs de LDAP.

Vu que les deux se comportent vraiment différemment, il serait peut- être judicieux de distinguer les deux. Ou alors, plutôt que chercher au petit bonheur la chance, on pourrait demander lors de l'installation quels sont les champs à mapper sur ceux de SPIP.

-Nicolas

je peux tester sur les deux, mais il n'y a jamais eu de pb avec ldap unix
bonne idée pour la fin

  je retente une install avec la derniere SVN

c'est toujours très long le passage de l'étape 2 a 3 comme s'il testait des trucs ( au moins 5mn)

la connexion d'un auteur existant se passe bien

mais pas la création depuis l'AD

j'ai une page blanche après l'installation et un fichier connect.tmp.php est crée dans config

c'est toujours très long le passage de l'étape 2 a 3 comme s'il testait
des trucs ( au moins 5mn)

Bah oui, c'est là qu'il créé les tables.

la connexion d'un auteur existant se passe bien

mais pas la création depuis l'AD

j'ai une page blanche après l'installation

Une fois de plus pas moi. Le source la page est-il vide aussi ? Et le log ?

et un fichier connect.tmp.php est crée dans config

Oui, c'est le fichier connect.php qui n'a pas encore son nom définitif, pour signifier que l'install est en cours (mais bien avancée s'il est là).

Committo,Ergo:Sum

Committo,Ergo:sum a écrit :

c'est toujours très long le passage de l'étape 2 a 3 comme s'il testait
des trucs ( au moins 5mn)

Bah oui, c'est là qu'il créé les tables.

je ne pense pas car la création sans connexioin LDAP ne présente pas ce blocage

la connexion d'un auteur existant se passe bien

mais pas la création depuis l'AD

j'ai une page blanche après l'installation

Une fois de plus pas moi. Le source la page est-il vide aussi ? Et le log ?

et un fichier connect.tmp.php est crée dans config

Oui, c'est le fichier connect.php qui n'a pas encore son nom définitif, pour signifier que l'install est en cours (mais bien avancée s'il est là).

Committo,Ergo:Sum

maintenant en refaisant l'install tout se passe bien

sauf la création automatique d'un auteur

mais je cherche

ce qui est bizarre c'est que sur le meme AD les appli web GLPI ou GRR
se créent sans problème

courage on y arrive

J'ai découvert à l'instant un nouveau bug dans la connexion LDAP de SPIP 1.9.2c.

En effet, lorsqu'on créé l'utilisateur dans SPIP s'il existe dans
l'annuaire, on passe son login en minuscules :
<http://trac.rezo.net/trac/spip/browser/branches/spip-1.9.2/ecrire/inc/auth_ldap.php#L108>

Or, le test d'existance dans la base ne passe pas au préalable en minuscules :
<http://trac.rezo.net/trac/spip/browser/branches/spip-1.9.2/ecrire/inc/auth_ldap.php#L30>

Donc si j'ai un login avec au moins une majuscule dans mon annuaire,
le compte sera recréé à chaque connexion. Etrange d'ailleurs qu'il n'y
ai pas une clause d'unicité sur le login dans la table.

J'ai viré le strtolower() pour l'instant, j'espère que ça conclura mes
soucis avec ActiveDirectory.

-Nicolas

J'ai découvert à l'instant un nouveau bug dans la connexion LDAP de SPIP 1.9.2c.

En effet, lorsqu'on créé l'utilisateur dans SPIP s'il existe dans
l'annuaire, on passe son login en minuscules :
<http://trac.rezo.net/trac/spip/browser/branches/spip-1.9.2/ecrire/inc/auth_ldap.php#L108&gt;

Or, le test d'existance dans la base ne passe pas au préalable en minuscules :
<http://trac.rezo.net/trac/spip/browser/branches/spip-1.9.2/ecrire/inc/auth_ldap.php#L30&gt;

Donc si j'ai un login avec au moins une majuscule dans mon annuaire,
le compte sera recréé à chaque connexion. Etrange d'ailleurs qu'il n'y
ai pas une clause d'unicité sur le login dans la table.

En fait, c'est encore plus fourbe là où je teste.

En effet, les logins sont stockés en majuscules dans
l'ActiveDirectory, mais les utilisateurs se connectent avec leur login
en minuscules, ce que l'AD accepte (config ou mode par défaut, je ne
sais pas).

Du coup, je vais plutôt forcer des minuscules partout, ce qui sera
déjà mieux que le mode bancal actuel de SPIP 1.9.2c

-Nicolas

Nicolas Hoizey a écrit :

J'ai découvert à l'instant un nouveau bug dans la connexion LDAP de SPIP 1.9.2c.

En effet, lorsqu'on créé l'utilisateur dans SPIP s'il existe dans
l'annuaire, on passe son login en minuscules :
<http://trac.rezo.net/trac/spip/browser/branches/spip-1.9.2/ecrire/inc/auth_ldap.php#L108&gt;

Or, le test d'existance dans la base ne passe pas au préalable en minuscules :
<http://trac.rezo.net/trac/spip/browser/branches/spip-1.9.2/ecrire/inc/auth_ldap.php#L30&gt;

Donc si j'ai un login avec au moins une majuscule dans mon annuaire,
le compte sera recréé à chaque connexion. Etrange d'ailleurs qu'il n'y
ai pas une clause d'unicité sur le login dans la table.
    
En fait, c'est encore plus fourbe là où je teste.

En effet, les logins sont stockés en majuscules dans
l'ActiveDirectory, mais les utilisateurs se connectent avec leur login
en minuscules, ce que l'AD accepte (config ou mode par défaut, je ne
sais pas).

Du coup, je vais plutôt forcer des minuscules partout, ce qui sera
déjà mieux que le mode bancal actuel de SPIP 1.9.2c

ah oui, ca date meme de bien plus loin que ca, j'ai eu le cas en 1.8.
j'avais forcé les majuscules dans le formulaire login.

C'est pas forcement plus logique, mais dans la mesure ou le LDAP est LA reference, autant se caler sur lui.

je ne sais pas si on peut appeler ca un bug de spip, c'est plutot un bug d'activedirectory qui est con : il est case sensitive mais ne gere que les majuscules, c'est débile...

@++

ah oui, ca date meme de bien plus loin que ca, j'ai eu le cas en 1.8.
j'avais forcé les majuscules dans le formulaire login.

OK, moi j'ai finalement forcé les minuscules partout, ce qui autorise n'importe quelle casse dans la saisie et dans l'AD.

C'est pas forcement plus logique, mais dans la mesure ou le LDAP est LA
reference, autant se caler sur lui.

Le protocole prévoie quelque chose à ce niveau ???

je ne sais pas si on peut appeler ca un bug de spip, c'est plutot un bug
d'activedirectory qui est con : il est case sensitive mais ne gere que
les majuscules, c'est débile...

En tout cas, il y a bien le bug de stocker en minuscule, sans passer en minuscule pour les vérification d'existence ultérieures...

-Nicolas

Bête question : est-ce qu’il y a un moyen de savoir quel est le type d’annuaire LDAP accédé ?
Ca permettrait de faire un paramétrage spécifique AD.

Bête question : est-ce qu'il y a un moyen de savoir quel est le type d'annuaire LDAP accédé ?
Ca permettrait de faire un paramétrage spécifique AD.

Je ne sais pas, mais je proposerais qu'on demande à l'utilisateur, tout simplement, si ce n'est pas possible.

Pour aller plus loin, ne serait-il pas envisageable de gérer une abstraction de méthode d'authentification, qui permettrait de choisir parmi celles déjà disponibles sous différentes formes ?

- HTTP
- SPIP
- LDAP
- ActiveDirectory
- openId
- CAS

-Nicolas