Ruby - LDAP Eğitimi
Ruby / LDAP, Ruby için bir uzantı kitaplığıdır. OpenLDAP, UMich LDAP, Netscape SDK, ActiveDirectory gibi bazı LDAP kitaplıklarına arayüz sağlar.
Uygulama geliştirme için ortak API, RFC1823'te açıklanmıştır ve Ruby / LDAP tarafından desteklenir.
Ruby / LDAP Kurulumu
SOURCEFORGE.NET'ten eksiksiz bir Ruby / LDAP paketi indirebilir ve kurabilirsiniz .
Ruby / LDAP'yi kurmadan önce, aşağıdaki bileşenlere sahip olduğunuzdan emin olun -
- Ruby 1.8.x (ldap / control kullanmak istiyorsanız en az 1.8.2).
- OpenLDAP, Netscape SDK, Windows 2003 veya Windows XP.
Artık standart Ruby Kurulum yöntemini kullanabilirsiniz. Başlamadan önce, extconf.rb için mevcut seçenekleri görmek istiyorsanız, '--help' seçeneğiyle çalıştırın.
$ ruby extconf.rb [--with-openldap1|--with-openldap2| \
--with-netscape|--with-wldap32]
$ make
$ make install
NOTE- Yazılımı Windows üzerinde oluşturuyorsanız , make yerine nmake kullanmanız gerekebilir .
LDAP Bağlantısı Kurun
Bu iki aşamalı bir süreçtir -
Adım 1 - Bağlantı Nesnesi Oluşturun
Aşağıda, bir LDAP dizinine bağlantı oluşturmak için sözdizimi verilmiştir.
LDAP::Conn.new(host = 'localhost', port = LDAP_PORT)
host- Bu, LDAP dizinini çalıştıran ana bilgisayar kimliğidir. Bunu localhost olarak alacağız .
port- Bu, LDAP hizmeti için kullanılan bağlantı noktasıdır. Standart LDAP bağlantı noktaları 636 ve 389'dur. Sunucunuzda hangi bağlantı noktasının kullanıldığından emin olun, aksi takdirde LDAP :: LDAP_PORT'u kullanabilirsiniz.
Bu çağrı , bağlantı noktası bağlantı noktasındaki sunucuya, ana bilgisayara yeni bir LDAP :: Conn bağlantısı döndürür .
Adım 2 - Bağlama
Bu, genellikle oturumun geri kalanında kullanacağımız kullanıcı adı ve parolayı belirttiğimiz yerdir.
Aşağıda, DN kullanarak bir LDAP bağlantısını bağlamak için sözdizimi verilmiştir, dnkimlik bilgisi, pwdve bağlama yöntemi, method -
conn.bind(dn = nil, password = nil, method = LDAP::LDAP_AUTH_SIMPLE)do
....
end
Aynı yöntemi bir kod bloğu olmadan da kullanabilirsiniz. Bu durumda, bağlantıyı aşağıdaki gibi açıkça çözmeniz gerekir:
conn.bind(dn = nil, password = nil, method = LDAP::LDAP_AUTH_SIMPLE)
....
conn.unbind
Bir kod bloğu verilirse, self bloğa verilir .
Artık uygun izinlere sahip olmamız koşuluyla, bağlama yönteminin bloğu içinde (bağlama ve çözme arasında) arama, ekleme, değiştirme veya silme işlemleri gerçekleştirebiliriz.
Example
Yerel bir sunucu üzerinde çalıştığımızı varsayarsak, uygun ana bilgisayar, etki alanı, kullanıcı kimliği ve şifre vb. İle bir araya getirelim.
#/usr/bin/ruby -w
require 'ldap'
$HOST = 'localhost'
$PORT = LDAP::LDAP_PORT
$SSLPORT = LDAP::LDAPS_PORT
conn = LDAP::Conn.new($HOST, $PORT)
conn.bind('cn = root, dc = localhost, dc = localdomain','secret')
....
conn.unbind
LDAP Girişi Ekleme
Bir LDPA girişi eklemek iki adımlı bir işlemdir -
Adım 1 - LDAP :: Mod nesnesinin oluşturulması
Bir girdi oluşturmak için conn.add yöntemine LDAP :: Mod nesne geçişine ihtiyacımız var . İşte LDAP :: Mod nesnesini oluşturmak için basit bir sözdizimi -
Mod.new(mod_type, attr, vals)
mod_type - Bir veya daha fazla seçenek LDAP_MOD_ADD, LDAP_MOD_REPLACE veya LDAP_MOD_DELETE.
attr - üzerinde işlem yapılacak özelliğin adı olmalıdır.
vals- öznitelik ile ilgili bir değerler dizisidir . Eğer vals iki veriler içeriyor, mod_type LDAP_MOD_BVALUES ile | () mantıksal OR'ed edilmelidir.
Bu çağrı , LDAP :: Conn sınıfındaki Conn # add, Conn # add_ext, Conn # modifiye ve Conn # modify_ext gibi yöntemlere aktarılabilen LDAP :: Mod nesnesini döndürür .
Adım 2 - conn.add Yönteminin çağrılması
LDAP :: Mod nesnesiyle hazır olduğumuzda, bir girdi oluşturmak için conn.add yöntemini çağırabiliriz . İşte bu yöntemi çağırmak için bir sözdizimi -
conn.add(dn, attrs)
Bu yöntem DN ile bir giriş ekler dn ve özelliklerini, attrs . Burada, öznitelikler ya bir LDAP :: Mod nesneleri dizisi ya da öznitelik / değer dizi çiftlerinin bir karması olmalıdır.
Example
İşte iki dizin girişi oluşturacak eksiksiz bir örnek -
#/usr/bin/ruby -w
require 'ldap'
$HOST = 'localhost'
$PORT = LDAP::LDAP_PORT
$SSLPORT = LDAP::LDAPS_PORT
conn = LDAP::Conn.new($HOST, $PORT)
conn.bind('cn = root, dc = localhost, dc = localdomain','secret')
conn.perror("bind")
entry1 = [
LDAP.mod(LDAP::LDAP_MOD_ADD,'objectclass',['top','domain']),
LDAP.mod(LDAP::LDAP_MOD_ADD,'o',['TTSKY.NET']),
LDAP.mod(LDAP::LDAP_MOD_ADD,'dc',['localhost']),
]
entry2 = [
LDAP.mod(LDAP::LDAP_MOD_ADD,'objectclass',['top','person']),
LDAP.mod(LDAP::LDAP_MOD_ADD, 'cn', ['Zara Ali']),
LDAP.mod(LDAP::LDAP_MOD_ADD | LDAP::LDAP_MOD_BVALUES, 'sn',
['ttate','ALI', "zero\000zero"]),
]
begin
conn.add("dc = localhost, dc = localdomain", entry1)
conn.add("cn = Zara Ali, dc = localhost, dc = localdomain", entry2)
rescue LDAP::ResultError
conn.perror("add")
exit
end
conn.perror("add")
conn.unbind
Bir LDAP Girişini Değiştirme
Bir girişi değiştirmek, bir giriş eklemeye benzer. Değiştirilecek niteliklerle eklemek yerine değiştirme yöntemini çağırmanız yeterlidir. İşte değiştirme yönteminin basit bir sözdizimi .
conn.modify(dn, mods)
Bu yöntem, DN, dn ve öznitelikler, modlar ile bir girişi değiştirir . Burada, modlar ya bir LDAP :: Mod nesneleri dizisi ya da bir öznitelik / değer dizisi çiftleri karması olmalıdır.
Misal
Önceki bölümde eklediğimiz girdinin soyadını değiştirmek için şunu yazardık -
#/usr/bin/ruby -w
require 'ldap'
$HOST = 'localhost'
$PORT = LDAP::LDAP_PORT
$SSLPORT = LDAP::LDAPS_PORT
conn = LDAP::Conn.new($HOST, $PORT)
conn.bind('cn = root, dc = localhost, dc = localdomain','secret')
conn.perror("bind")
entry1 = [
LDAP.mod(LDAP::LDAP_MOD_REPLACE, 'sn', ['Mohtashim']),
]
begin
conn.modify("cn = Zara Ali, dc = localhost, dc = localdomain", entry1)
rescue LDAP::ResultError
conn.perror("modify")
exit
end
conn.perror("modify")
conn.unbind
Bir LDAP Girişini Silme
Bir girişi silmek için, parametre olarak ayırt edici adı olan silme yöntemini çağırın . İşte silme yönteminin basit bir sözdizimi .
conn.delete(dn)
Bu yöntem, DN, dn ile bir girişi siler .
Misal
Bir önceki bölümde eklediğimiz Zara Mohtashim girişini silmek için şunu yazardık -
#/usr/bin/ruby -w
require 'ldap'
$HOST = 'localhost'
$PORT = LDAP::LDAP_PORT
$SSLPORT = LDAP::LDAPS_PORT
conn = LDAP::Conn.new($HOST, $PORT)
conn.bind('cn = root, dc = localhost, dc = localdomain','secret')
conn.perror("bind")
begin
conn.delete("cn = Zara-Mohtashim, dc = localhost, dc = localdomain")
rescue LDAP::ResultError
conn.perror("delete")
exit
end
conn.perror("delete")
conn.unbind
Ayırt Edici Adı Değiştirme
Bir girişin ayırt edici adını değiştirme yöntemiyle değiştirmek mümkün değildir . Bunun yerine modrdn yöntemini kullanın . İşte modrdn yönteminin basit sözdizimi -
conn.modrdn(dn, new_rdn, delete_old_rdn)
Bu yöntem girdinin RDN'sini DN, dn ile değiştirerek ona yeni RDN, new_rdn verir . Eğer delete_old_rdn olduğu doğrudur , eski RDN'de değer girişi silinecektir.
Misal
Aşağıdaki girişe sahip olduğumuzu varsayalım -
dn: cn = Zara Ali,dc = localhost,dc = localdomain
cn: Zara Ali
sn: Ali
objectclass: person
Ardından, ayırt edici adını aşağıdaki kodla değiştirebiliriz -
#/usr/bin/ruby -w
require 'ldap'
$HOST = 'localhost'
$PORT = LDAP::LDAP_PORT
$SSLPORT = LDAP::LDAPS_PORT
conn = LDAP::Conn.new($HOST, $PORT)
conn.bind('cn = root, dc = localhost, dc = localdomain','secret')
conn.perror("bind")
begin
conn.modrdn("cn = Zara Ali, dc = localhost, dc = localdomain", "cn = Zara Mohtashim", true)
rescue LDAP::ResultError
conn.perror("modrdn")
exit
end
conn.perror("modrdn")
conn.unbind
Arama Yapma
Bir LDAP dizininde arama yapmak için , üç farklı arama modundan biriyle arama yöntemini kullanın -
LDAP_SCOPE_BASEM - Yalnızca temel düğümü arayın.
LDAP_SCOPE_ONELEVEL - Temel düğümün tüm alt öğelerini arayın.
LDAP_SCOPE_SUBTREE - Temel düğüm dahil tüm alt ağacı arayın.
Misal
Burada, kişi nesneleri için dc = localhost, dc = localdomain girişinin tüm alt ağacını arayacağız -
#/usr/bin/ruby -w
require 'ldap'
$HOST = 'localhost'
$PORT = LDAP::LDAP_PORT
$SSLPORT = LDAP::LDAPS_PORT
base = 'dc = localhost,dc = localdomain'
scope = LDAP::LDAP_SCOPE_SUBTREE
filter = '(objectclass = person)'
attrs = ['sn', 'cn']
conn = LDAP::Conn.new($HOST, $PORT)
conn.bind('cn = root, dc = localhost, dc = localdomain','secret')
conn.perror("bind")
begin
conn.search(base, scope, filter, attrs) { |entry|
# print distinguished name
p entry.dn
# print all attribute names
p entry.attrs
# print values of attribute 'sn'
p entry.vals('sn')
# print entry as Hash
p entry.to_hash
}
rescue LDAP::ResultError
conn.perror("search")
exit
end
conn.perror("search")
conn.unbind
Bu, LDAP girişinin LDAP :: Entry sınıfının bir örneği tarafından temsil edildiği her eşleşen giriş için verilen kod bloğunu çağırır. Son arama parametresi ile, ilgilendiğiniz öznitelikleri, diğerlerini atlayarak belirtebilirsiniz. Buraya nil geçerseniz, tüm öznitelikler ilişkisel veritabanlarında "SELECT *" olarak döndürülür.
LDAP :: Entry sınıfının dn yöntemi (get_dn için takma ad) girdinin ayırt edici adını döndürür ve to_hash yöntemiyle, özniteliklerinin karma temsilini (ayırt edici ad dahil) elde edebilirsiniz. Bir girdinin özniteliklerinin bir listesini almak için attrs yöntemini kullanın (get_attributes için takma ad). Ayrıca, belirli bir özniteliğin değerlerinin listesini almak için vals yöntemini kullanın (get_values için takma ad).
Hataları Yönetme
Ruby / LDAP iki farklı istisna sınıfı tanımlar -
Bir hata durumunda, yeni, bağlama veya çözme yöntemleri bir LDAP :: Hata istisnası oluşturur.
Bir LDAP dizini ekleme, değiştirme, silme veya arama durumunda bir LDAP :: ResultError yükseltin.
Daha fazla okuma
LDAP yöntemleriyle ilgili tüm ayrıntılar için, lütfen LDAP Belgeleri için standart belgelere bakın .