Программирование на языке Ruby.

10.4.4. Интерфейс с LDAP.

Для Ruby есть по меньшей мере три разных библиотеки, позволяющих работать с протоколом LDAP. Ruby/LDAP, написанная Такааки Татеиси (Takaaki Tateishi), — это довольно «тонкая» обертка. Если вы хорошо знакомы с LDAP, то ее может оказаться достаточно; в противном случае вы, наверное, сочтете ее слишком сложной. Пример:

Conn = LDAP::Conn.new("rsads02.foo.com").

Conn.bind("CN=username,CN=Users,DC=foo,DC=com", "password") do |bound|

 bound.search("DC=foo,DC=com", LDAP::LDAP_SCOPE_SUBTREE,

  "(&(name=*) (objectCategory=person))", ['name','ipPhone']).

 do |user|

  puts "#{user['name']} #{user['ipPhone']}".

 end.

End.

Библиотека ActiveLDAP организована по образцу ActiveRecord. Вот пример ее использования, взятый с домашней страницы:

Require 'activeldap'.

Require 'examples/objects/user'.

Require 'password'.

# Установить соединение Ruby/ActiveLDAP и т. д.

ActiveLDAP::Base.connect(:password_block.

 => Proc.new { Password.get('Password: ') },

  :allow_anonymous => false).

# Загрузить запись с данными о пользователе.

# (ее класс определен в примерах).

Wad = User.new('wad').

# Напечатать общее имя.

Р wad.cn.

# Изменить общее имя.

Wad.cn = "Will".

# Сохранить в LDAP.

Wad.write.

Есть также сравнительно недавняя библиотека, написанная Фрэнсисом Чианфрокка (Francis Cianfrocca), многие предпочитают именно ее:

Require 'net/ldap'.

Ldap = Net::LDAP.new :host => server_ip_address,

 :port => 389,

 :auth => {

  :method => :simple,

  :username => "cn=manager,dc=example,dc=com",

  :password => "opensesame".

 }

Filter = Net::LDAP::Filter.eq( "cn", "George*" ).

Treebase = "dc=example,dc=com".

Ldap.search( :base => treebase, :filter => filter ) do |entry|

 puts "DN: #{entry.dn}".

 entry.each do |attribute, values|

  puts " #{attribute}:".

  values.each do |value|

   puts " --->#{value}".

  end.

 end.

End.

P ldap.get_operation_result.

Какая из этих библиотек лучше — дело вкуса. Я рекомендую познакомиться со всеми и сформировать собственное мнение.