vendredi 7 novembre 2008

Les APIs LDAP pour Ruby

J'ai recensé 3 APIs LDAP pour Ruby :

Net-ldap c'est l'équivalent au Net::LDAP de Perl .
activeldap: Cette librairie émule activerecord qui au lieu d'utiliser une base de données va se connecter à un annuaire LDAP.
ruby-ldap: Ca ressemble un peu à l'ancinne librairie perl-ldap.

Dans mes recherches , je veux recuperer le schémas de l'annuaire.

Seule ruby-ldap permet de réaliser cette opération facilement.
Le programme suivant est donné en exemple:

require 'ldap'
require 'ldap/schema'

#conn = LDAP::Conn.new( 'localhost', 389 )
#conn.bind( '', '' )
$HOST ='localhost'
$PORT=389


conn = LDAP::Conn.new($HOST, $PORT)
conn.set_option( LDAP::LDAP_OPT_PROTOCOL_VERSION, 3 )

conn.bind{
schema = conn.schema()
p schema.must("person")
p schema.attr("person", "MUST")
p schema.may("person")
p schema.attr("person", "MAY")
p schema.sup("person")
p schema.attr("person", "SUP")
schema.each{|key,vals|
vals.each{|val|
print("#{key}: #{val}\n")
}
}
}

La construction est particuliaire et je vais chercher à l'améliorer.

Par contre la librairie ruby-ldap n'est pas compatible avec les dernieres versions de ruby , j'ai du appliquer le patch suivant sur le fichier schema.rb



--- schema.rb 2008-11-07 15:30:23.000000000 +0100
+++ /usr/local/lib/site_ruby/1.8/ldap/schema.rb 2008-11-07 14:48:58.000000000 +0100
@@ -35,7 +35,7 @@
self['objectClasses'].each{|s|
if( s =~ /NAME\s+'#{oc}'/ )
case s
- when /#{at}\s+\(([\w\d_-\s\$]+)\)/i
+ when /#{at}\s+\(([\w\s\$-]+)\)/i
return $1.split("$").collect{|attr| attr.strip}
when /#{at}\s+([\w\d_-]+)/i
return $1.split("$").collect{|attr| attr.strip}

Aucun commentaire: