Bonjour,
J'ai une question concernant perl et le ldap.
Je mets en place koha, un logiciel de bibliothèque, fait en perl. Je dois le connecter au ldap pour récupérer les utilisateurs.
Voici ma configuration
<hostname>******</hostname>
<base>ou=people,dc=ecp,dc=fr</base>
<user>cn=syncrepl,ou=applications,dc=ecp,dc=fr</user>
<pass>*****</pass>
<replicate>1</replicate>
<update>1</update>
<auth_by_bind>1</auth_by_bind>
<principal_name>uid=%s,ou=people,dc=ecp,dc=fr</principal_name>
<mapping>
<firstname is="givenname"></firstname>
<surname is="sn"></surname>
<address is="">Ecole Centrale Paris</address>
<city is="">Chatenay-Malabry</city>
<zipcode is="">92290</zipcode>
<branchcode is="">ECAM</branchcode>
<userid is="uid"></userid>
<password is="userpassword"></password>
<cardnumber is="ecpbadgenumber"></cardnumber>
<email is="mail"></email>
<categorycode is="supannetudiplome">employee</categorycode>
<phone is="telephonenumber">903-566-7654</phone>
<dateenrolled is="">2012-09-01</dateenrolled>
<dateexpiry is="">2013-09-01</dateexpiry>
</mapping>
</ldapserver>
Mon soucis est au niveau du userid qui utilise l'uid. Ce dernier est de la forme "2009dupontj", 2009 étant l'année d'arrivée et dupontj le supannAliasLogin.
Nous souhaiterions utiliser le supannAliasLogin à la place de l'uid, ce qui serait plus simple pour nous.
Comment déclarer une authentification avec un attribut autre que l'uid?
Je ne suis pas un cador en perl mais je vois qu'il y a le module Net::Ldap::Filter qui pourrait me permettre de faire un filtre.
Si je regarde le code, ça doit se jouer à ce niveau là (je met le fichier entier en pièce jointe).
sub search_method {
my $db = shift or return;
my $userid = shift or return;
my $uid_field = $mapping{userid}->{is} or die ldapserver_error("mapping for 'userid'");
my $filter = Net::LDAP::Filter->new("$uid_field=$userid") or die "Failed to create new Net::LDAP::Filter";
my $search = $db->search(
base => $base,
filter => $filter,
# attrs => ['*'],
) or die "LDAP search failed to return object.";
my $count = $search->count;
if ($search->code > 0) {
warn sprintf("LDAP Auth rejected : %s gets %d hits\n", $filter->as_string, $count) . description($search);
return 0;
}
if ($count != 1) {
warn sprintf("LDAP Auth rejected : %s gets %d hits\n", $filter->as_string, $count);
return 0;
}
return $search;
}
Merci d'avance pour vos lumières.
Partager