Jorani & LDAP

959 views
Skip to first unread message

ki...@oav.net

unread,
Apr 1, 2015, 1:45:24 PM4/1/15
to jor...@googlegroups.com
Bonjour,

J'essaye de faire coller Jarani et LDAP mais... J'y arrive pas. Dès que j'active le LDAP dans conf, les comptes locaux sont inutilisables.

Qu'est-ce que j'ai oublié ? Car la documentation admirable sur d'autres points et un peu vierge ... sur ce point... ?

Comment activer un debug pour vérifier que tout se passe bien ?

Xavier

Benjamin BALET

unread,
Apr 1, 2015, 1:48:19 PM4/1/15
to jor...@googlegroups.com
Bonjour,

La configuration LDAP est entièrement documentée : http://fr.jorani.org/utilisation/fichier-de-configuration.html § Configuration LDAP
Il faut vous rapprocher de l'admin LDAP pour savoir si tous les utilisateurs sont au même endroit ou s'il faut donner le chemin individuel de chaque employé.

Xavier Beaudouin

unread,
Apr 1, 2015, 1:55:54 PM4/1/15
to jor...@googlegroups.com
Hello,


> Bonjour,
> La configuration LDAP est entièrement documentée :
> http://fr.jorani.org/utilisation/fichier-de-configuration.html § Configuration
> LDAP
> Il faut vous rapprocher de l'admin LDAP pour savoir si tous les utilisateurs
> sont au même endroit ou s'il faut donner le chemin individuel de chaque
> employé.

Je _suis_ l'admin LDAP, tout l'arbre est dans ou=people,dc=domaine,dc=com.

Quand je fait un search sur l'uid=%u comme dans le doc j'ai les pb suivants :

1- L'authentification locale ne fonctionne plus (donc pratique pour donner des droits)
2- L'authentification ldap non plus.

Je suis basé sur du posixAccount, donc il y a peut-être quelque chose qui ne passe pas, mais je sais pas comment debugger l'authentification LDAP (en général quand ca merdoie, c'est qu'il y a truc qui passe pas, donc le debug c'est bien).

Xavier

Benjamin BALET

unread,
Apr 1, 2015, 2:32:44 PM4/1/15
to jor...@googlegroups.com
Nous sommes bien d'accord que le placeholder est %s et pas %u (%u voulant dire unsigned integer) et que vous avez fait une typo ?

Il n'y a pas grand'chose à débugguer. Le système tente un bind qui renvoie true ou false : http://php.net/manual/fr/function.ldap-bind.php

Il faut essayer de faire un fichier PHP à la racine du site (temporairement) : remplacer bbalet par un de vos comptes et password par son mot de passe
Le lancer depuis le navigateur et voir ce que ça donne.

<?php
define
(LDAP_OPT_DIAGNOSTIC_MESSAGE0x0032)
$handle ldap_connect('ldap://active.directory.server:port/');
$bind ldap_bind($handle'uid=bbalet,ou=people,dc=company,dc=com''password');

if (
$bind) {
    if (
ldap_get_option($handleLDAP_OPT_DIAGNOSTIC_MESSAGE$extended_error)) {
        echo 
"Error Binding to LDAP: $extended_error";
    } else {
        echo 
"Error Binding to LDAP: No additional information is available.";
    }
}
?>

Xavier Beaudouin

unread,
Apr 2, 2015, 12:19:27 PM4/2/15
to jorani
Salut,

> Nous sommes bien d'accord que le placeholder est %s et pas %u (%u voulant dire
> unsigned integer) et que vous avez fait une typo ?

Oui tout à fait.

> Il n'y a pas grand'chose à débugguer. Le système tente un bind qui renvoie true
> ou false : http://php.net/manual/fr/function.ldap-bind.php
> Il faut essayer de faire un fichier PHP à la racine du site (temporairement) :
> remplacer bbalet par un de vos comptes et password par son mot de passe
> Le lancer depuis le navigateur et voir ce que ça donne.

> <?php
> define ( LDAP_OPT_DIAGNOSTIC_MESSAGE , 0x0032 );
> $handle = ldap_connect ( 'ldap://active.directory.server:port/' );
> $bind = ldap_bind ( $handle , ' uid=bbalet,ou=people,dc=company,dc=com ' ,
> 'password' );

> if ( $bind ) {
> if ( ldap_get_option ( $handle , LDAP_OPT_DIAGNOSTIC_MESSAGE , $extended_error
> )) {
> echo "Error Binding to LDAP: $extended_error " ;
> } else {
> echo "Error Binding to LDAP: No additional information is available." ;
> }
> }
> ?>

J'ai essayé ce code, il butte sur le ldap_bind().

De mon coté quand je fait une authentif ldap, c'est plus "complexe" :

<?php
$user = "user";
$password= "thepass";
$dn = "ou=people,dc=company,dc=com";
$ldapserv = "ldap.company.com";

if(!$con = ldap_connect($ldapsrv)) {
echo "Error";
exit;
}
else
{
ldap_set_option($con, LDAP_OPT_PROTOCOL_VERSION, 3);

// bind anon and find user by uid
$user_search = ldap_search($con,$dn,"(|(uid=$user)(mail=$user))");
$user_get = ldap_get_entries($con, $user_search);
$user_entry = ldap_first_entry($con, $user_search);
$user_dn = ldap_get_dn($con, $user_entry);
$user_id = $user_get[0]["uid"][0];

// Catch errors
set_error_handler(function() { /* Ignore */ });
if(ldap_bind($con, $user_dn, $password)===false) {
echo "Error";
exit;
}
else
{
echo "OK";
exit;
}
}
?>

Le simple bind sur un uid=truc,dc=company,dc=com ne peux pas toujours fonctionner a tous les coups.

Cette méthode est un peu plus "pratique" car elle trouve le bon dn sur lequel binder pour vérifier le mdp (selon les annuaires ca peux etre uid=truc ou autre chose).

Ceci aussi explique pourquoi je n'arrive pas à m'authentifier via LDAP.

Veux-tu que je te fasses un patch pour session.php ?

Xavier

Benjamin BALET

unread,
Apr 2, 2015, 12:34:17 PM4/2/15
to jor...@googlegroups.com
Je ne suis pas sûr de comprendre. La ligne de code :

$user_search = ldap_search($con,$dn,"(|(uid=$user)(mail=$user))");

Fait une recherche soit sur l'id, soit sur l'e-mail. Il y a deux possibilités :
  • Soit l'identifiant de connection est un e-mail dans LDAP => configuration de Jorani mail=%s,dc=company,dc=com
  • Soit l'identifiant de connection est l'id dans LDAP => configuration de Jorani uid=%s,dc=company,dc=com
La troisième possibilité est que l'annuaire est désorganisé et c'est soit l'un soit l'autre. Dans ce cas, il faut passer la variable ldap_basedn_db à TRUE et mettre à jour le chemin LDAP pour chaque utilisateur (cas identique où les utilisateurs sont des OU différentes) http://fr.jorani.org/ecrans/page-ajouter-un-utilisateur.html#5

Ou mettre de l'ordre dans l'annuaire.

Benjamin


Xavier

--
You received this message because you are subscribed to the Google Groups "jorani" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jorani+un...@googlegroups.com.
To post to this group, send email to jor...@googlegroups.com.
Visit this group at http://groups.google.com/group/jorani.
To view this discussion on the web visit https://groups.google.com/d/msgid/jorani/1258470447.36664.1427991562913.JavaMail.zimbra%40oav.net.
For more options, visit https://groups.google.com/d/optout.

Xavier Beaudouin

unread,
Apr 2, 2015, 12:37:56 PM4/2/15
to jorani
Hello,

> Je ne suis pas sûr de comprendre. La ligne de code :

> $user_search = ldap_search($con,$dn,"(|(uid=$ user)(mail=$user))");

> Fait une recherche soit sur l'id, soit sur l'e-mail. Il y a deux possibilités :

Oui c'est extract de code que j'utilise pour d'autre choses, on peux garder dans notre cas :

$user_search = ldap_search($con,$dn,"(uid=$ user)");

> La troisième possibilité est que l'annuaire est désorganisé et c'est soit l'un
> soit l'autre. Dans ce cas, il faut passer la variable ldap_basedn_db à TRUE et
> mettre à jour le chemin LDAP pour chaque utilisateur (cas identique où les
> utilisateurs sont des OU différentes)
> http://fr.jorani.org/ecrans/page-ajouter-un-utilisateur.html#5

J'ai testé et comme je te dis, je ne peux même plus me connecter avec les utilisateurs locaux :(

> Ou mettre de l'ordre dans l'annuaire.

Déjà fait (y avais du travail). :)

/Xavier

Benjamin BALET

unread,
Apr 2, 2015, 12:48:04 PM4/2/15
to jor...@googlegroups.com
En fait tu as un problème de duplication d'entrées dans ton annuaire.

Le code search, get entries, first entry, get dn n'est pas performant. Surtout qu'il correspond à ton cas spécifique. Tu peux patcher ton instance de Jorani si ça marche.

Merci pour ta suggestion, mais on ne peux dégrader les performances de tous les utilisateurs pour répondre à un problème spécifique.

Xavier Beaudouin

unread,
Apr 7, 2015, 4:09:40 AM4/7/15
to jorani
Salut,

> En fait tu as un problème de duplication d'entrées dans ton annuaire.

Non j'ai vérifié.

> Le code search, get entries, first entry, get dn n'est pas performant. Surtout
> qu'il correspond à ton cas spécifique. Tu peux patcher ton instance de Jorani
> si ça marche.

Je vois pas pourquoi ce code n'est pas performant, je le trouve un peu partout dans d'autres projets.
Et, à priori, il est juste lancé lors des sessions ?

> Merci pour ta suggestion, mais on ne peux dégrader les performances de tous les
> utilisateurs pour répondre à un problème spécifique.

Donc je forke ton code pour mes besoins sur github.

Xavier

Benjamin BALET

unread,
Apr 7, 2015, 4:28:09 AM4/7/15
to jor...@googlegroups.com
Le but de ton code est de trouver le "distinguished name" ou chemin unique permettant d'indentifier une ressource dans LDAP, c'est-à-dire le contenu de $user_dn après cette ligne:
$user_dn = ldap_get_dn($con, $user_entry);

Puis, tu fais un bind sur ce chemin unique (le contenu de $user_dn).

Or la configuration alternative de Jorani (en stockant les chemins uniques dans la table des utilisateurs) réalise cette dernière étape (le bind), mais sans la séquence search, get entries, first entry, get dn. En fait, c'est le contenu de ta variable $user_dn qui serait stockée dans la table des utilisateurs.

Bon fork.

--
You received this message because you are subscribed to the Google Groups "jorani" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jorani+un...@googlegroups.com.
To post to this group, send email to jor...@googlegroups.com.
Visit this group at http://groups.google.com/group/jorani.

Xavier Beaudouin

unread,
Apr 7, 2015, 4:50:55 AM4/7/15
to jorani
Salut,


> Le but de ton code est de trouver le "distinguished name" ou chemin unique
> permettant d'indentifier une ressource dans LDAP, c'est-à-dire le contenu de
> $user_dn après cette ligne :
> $user_dn = ldap_get_dn($con, $user_entry);

> Puis, tu fais un bind sur ce chemin unique (le contenu de $user_dn) .

> Or la configuration alternative de Jorani (en stockant les chemins uniques dans
> la table des utilisateurs) réalise cette dernière étape (le bind), mais sans la
> séquence search, get entries, first entry, get dn. En fait, c'est le contenu de
> ta variable $user_dn qui serait stockée dans la table des utilisateurs.

Oui j'ai vu ça _sauf_ que :

if (enabled(ldap))
then
login = access denied
fi

y compris les utilisateurs locaux.

Donc le pb n'est pas la configuration du ldap, y compris alternative, mais le fait que personne peux se connecter si j'active l'authentif LDAP...

Xavier

Julien Gibson

unread,
Apr 9, 2015, 8:54:18 AM4/9/15
to jor...@googlegroups.com
J'ai installé la solution chez moi hier avec l'authentif LDAP, ça fonctionne.

Il faut :

sur le fichier de conf activer le LDAP biensur mais aussi bien entrer le basedn qui par exemple pour moi est :

uid=%s,OU=Staff,OU=Users,DC=hq,DC=SOCIETE,DC=com


pour rappel afin de bien renseigner le champs basedn il faut garder le champs uid=%s, chaque OU= doit comporter le nom des sous dossiers dans l'OU de l'AD comportant les comptes utilisateurs.
Les champs DC= pour le fqn du domaine.
Ce qui donne par exemple que si pour le domaine XY.SOCIETE.COM, les comptes sont dans le sous dossier SOCIETE\Staff\Users, alors ça donnera : "uid=%s,OU=Users,OU=Staff,OU=SOCIETE,DC=XY,DC=SOCIETE,DC=COM

Il faudra juste activer aussi la fonction ldap_basedn_db dans le fichier de config.php a la fin de la config LDAP.



ENSUITE,

Il suffit d'injecter les comptes utilisateurs dans la base sql de Jorani sans les mots de passe, et ça fonctionne.

J'ai fait ça hier et on est plus d'une 50e à se connecter avec nos comptes AD.


En espérant que ça vous aidera ;)

Xavier Beaudouin

unread,
Apr 9, 2015, 8:56:58 AM4/9/15
to jorani
Hello,

> J'ai installé la solution chez moi hier avec l'authentif LDAP, ça fonctionne.
> Il faut :

> sur le fichier de conf activer le LDAP biensur mais aussi bien entrer le basedn
> qui par exemple pour moi est :

> uid=%s,OU=Staff,OU=Users,DC=hq,DC=SOCIETE,DC=com

> pour rappel afin de bien renseigner le champs basedn il faut garder le champs
> uid=%s, chaque OU= doit comporter le nom des sous dossiers dans l'OU de l'AD
> comportant les comptes utilisateurs.
> Les champs DC= pour le fqn du domaine.
> Ce qui donne par exemple que si pour le domaine XY.SOCIETE.COM, les comptes sont
> dans le sous dossier SOCIETE\Staff\Users, alors ça donnera :
> "uid=%s,OU=Users,OU=Staff,OU=SOCIETE,DC=XY,DC=SOCIETE,DC=COM

> Il faudra juste activer aussi la fonction ldap_basedn_db dans le fichier de
> config.php a la fin de la config LDAP.

> ENSUITE,

> Il suffit d'injecter les comptes utilisateurs dans la base sql de Jorani sans
> les mots de passe, et ça fonctionne.

> J'ai fait ça hier et on est plus d'une 50e à se connecter avec nos comptes AD.

> En espérant que ça vous aidera ;)

Ah le Ensuite je ne l'avais (vu ? lu ? bref...) je pensais que jorani créais automatiquement l'user depuis le ldap.

Merci du tuyau.

Xavier
Message has been deleted

sebastien....@anphitek.fr

unread,
Aug 3, 2016, 11:16:23 AM8/3/16
to jorani


Le mercredi 3 août 2016 17:15:44 UTC+2, sebastien....@anphitek.fr a écrit :
Bonjour,
Chez moi le ldap fonctionne mais je suis obligé de rentrer les utilisateurs a la main dans la base.
Y'a t'il un moyen pour automatiser le processus ?

Cordialement

Benjamin BALET

unread,
Aug 3, 2016, 11:20:38 AM8/3/16
to jor...@googlegroups.com

2016-08-03 17:15 GMT+02:00 <sebastien....@anphitek.fr>:
Y'a t'il un moyen pour automatiser le procéssus ?

Si vous pensez à un import LDAP : Non, car les utilisateurs nouvellement créés ont des attributs particuliers (manager, contrat, organisation, etc.).
Si vous êtes sûr de votre coup, vous pouvez tenter un import SQL, le modèle de données étant très simple.

Sébastien Dommergues

unread,
Aug 3, 2016, 11:26:03 AM8/3/16
to jor...@googlegroups.com
Merci pour votre réponse rapide :)


Sébastien Dommergues
Service IT Anphitek

400 Avenue Henri Laugier

Z.I Les Trois Moulins

06600 ANTIBES

Fixe : 04.92.91.86.22

i...@anphitek.fr



--
You received this message because you are subscribed to a topic in the Google Groups "jorani" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/jorani/2V0AsH8kt74/unsubscribe.
To unsubscribe from this group and all its topics, send an email to jorani+un...@googlegroups.com.

To post to this group, send email to jor...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages