Mantis

[Resolved] Active Directory et requete LDAP

Posted by cyrilM 
[Resolved] Active Directory et requete LDAP
August 27, 2009 03:31PM
Bonjour,

J'ai deployé Mantis (1.1.6) sur un de nos serveurs (Win2003) avec une authentification LDAP dans notre Active Directory.
Avec succès pour notre site (situer en France)
Je voudrais modifier les paramètres du fichier config_inc.php afin que des utilisateurs d'un site au USA puisse se connecter via notre Intranet.

...
$g_ldap_root_dn = 'ou=Users,ou=France,ou=Europe,dc=MyDomain,dc=net';
$g_ldap_organization = '';
$g_ldap_uid_field = 'sAMAccountName';
...

Si je change pour faire pointer sur les USA:
$g_ldap_root_dn = 'ou=Users,ou=USA,ou=Americas,dc=MyDomain,dc=net';
Les personnes du site français ne peuvent plus se connecter...

Et si je fais pointer sur le domaine entier
$g_ldap_root_dn = 'ou=Users,dc=MyDomain,dc=net';
Ca ne marche pour personne !

Toute aide suggestion est la bienvenue !

Ou alors peut être est il possible de passer par un groupe de l'Active Directory mais la encore je ne sais pas quels paramètres sont les bons ...

Merci pour votre aide,

C.
Re: Active Directory et requete LDAP
August 27, 2009 03:56PM
Il faut vérifier avec un client LDAP qu'il est possible de chercher un utilisateur quand le root DN est le monde entier et vérifier qu'un utilisateur peut s'authentifier quand le DN est sur le monde.

Vincent


Mantis: 1.1.0, 1.1.5, 1.1.1
PHP: 5.0.4
SQL: MySQL 5.0.19
OS: Linux

Please complete your signature with your environment informations.
Enable skype notification here
Re: Active Directory et requete LDAP
August 31, 2009 03:09PM
Bonjour,

Petite erratum dans mon précédent post... La version de Mantis installée est la 1.1.8 smiling smiley
Sinon,
J'ai fait des essais avec le client ldap (de Microsoft) : ldp
Pas de problème pour chercher un utilisateur quand le root_dn est le monde entier, ni pour s'authentifier quand le dn est sur le monde.

Par contre ... smiling smiley Il faut modifier le paramètre scope du ldapsearch et le mettre à la valeur Subtree.
Du coup: Comment est ce que je peux modifier ce paramètre dans Mantis ? Je n'ai pas trouvé le champ correspondant dans le fichier de configuration...

Une idée sur comment faire ?

C.

Mantis: 1.1.8
PHP: 5.2.9.9
MySQL: 5.1
OS: Windows 2003 Server - US
Re: Active Directory et requete LDAP
August 31, 2009 03:14PM
Quote
cyrilM
Par contre ... smiling smiley Il faut modifier le paramètre scope du ldapsearch et le mettre à la valeur Subtree.

Oui c'est logique.

Quote

Du coup: Comment est ce que je peux modifier ce paramètre dans Mantis ?

Il y est déjà, c'est ça le truc qui est bizarre... Il faudrait instrumenter le code Mantis avec des die(), des echo... dans le fichier core/ldap_api.php pour comprendre où ça coince (recherche de l'utilisateur ou authentification).

Vincent


Mantis: 1.1.0, 1.1.5, 1.1.1
PHP: 5.0.4
SQL: MySQL 5.0.19
OS: Linux

Please complete your signature with your environment informations.
Enable skype notification here
Re: Active Directory et requete LDAP
September 03, 2009 04:47PM
Bon finalement on a trouvé un moyen de résoudre notre problème smiling smiley
Nous avons modifié la fonction ldap_authenticate dans core\ldap_api.php de tel façon qu'elle boucle sur un nombre de ldap_root_dn définis dans le fichier de configuration config_inc.php:

In config_inc.php
$g_ldap_root_dn1 = ...
$g_ldap_root_dn2 = ...
we also added a new variable
$g_ldap_root_dn_count = 2; # Dans notre cas

# --------------------
# Attempt to authenticate the user against the LDAP directory
# return true on successful authentication, false otherwise
function ldap_authenticate( $p_user_id, $p_password ) {
# if password is empty and ldap allows anonymous login, then
# the user will be able to login, hence, we need to check
# for this special case.
if ( is_blank( $p_password ) ) {
return false;
}

$t_ldap_organization = config_get( 'ldap_organization' );

$t_username = user_get_field( $p_user_id, 'username' );
$t_ldap_uid_field = config_get( 'ldap_uid_field', 'uid' ) ;
$t_search_filter = "(&$t_ldap_organization($t_ldap_uid_field=$t_username))";
$t_search_attrs = array( $t_ldap_uid_field, 'dn' );
$t_ds = ldap_connect_bind();

# Search for the user id in DNs
$t_authenticated = false;
$t_ldap_root_dn_count = config_get( 'ldap_root_dn_count&#039winking smiley;
for ( $j = 1 ; $j <= $t_ldap_root_dn_count ; $j++ ) {
$t_ldap_root_dn = config_get( &#039;ldap_root_dn&#039;.$j);
$t_sr = ldap_search( $t_ds, $t_ldap_root_dn, $t_search_filter, $t_search_attrs );
$t_info = ldap_get_entries( $t_ds, $t_sr );
if ( $t_info ) {
# Try to authenticate to each until we get a match
for ( $i = 0 ; $i < $t_info[&#039;count&#039;] ; $i++ ) {
$t_dn = $t_info[$i][&#039;dn&#039;];

# Attempt to bind with the DN and password
if ( @ldap_bind( $t_ds, $t_dn, $p_password ) ) {
$t_authenticated = true;
break; # Don&#039;t need to go any further
}
}
}
ldap_free_result( $t_sr );
}

ldap_unbind( $t_ds );
return $t_authenticated;
}



Bon je suis sur que le code peut être optimisé... mais comme il fonctionne en état ca me va !smiling smiley
C.
Sorry, only registered users may post in this forum.

Click here to login



Online Users

Guests: 5
Record Number of Users: 1 on November 09, 2017
Record Number of Guests: 117 on February 24, 2019
Top Users
Hébergeur : Morinie.Fr