Ruby - Tutorial LDAP

Ruby / LDAP adalah pustaka ekstensi untuk Ruby. Ini menyediakan antarmuka ke beberapa pustaka LDAP seperti OpenLDAP, UMich LDAP, Netscape SDK, ActiveDirectory.

API umum untuk pengembangan aplikasi dijelaskan di RFC1823 dan didukung oleh Ruby / LDAP.

Instalasi Ruby / LDAP

Anda dapat mengunduh dan menginstal paket Ruby / LDAP lengkap dari SOURCEFORGE.NET .

Sebelum menginstal Ruby / LDAP, pastikan Anda memiliki komponen berikut -

  • Ruby 1.8.x (setidaknya 1.8.2 jika Anda ingin menggunakan ldap / control).
  • OpenLDAP, Netscape SDK, Windows 2003 atau Windows XP.

Sekarang, Anda dapat menggunakan metode Instalasi Ruby standar. Sebelum memulai, jika Anda ingin melihat opsi yang tersedia untuk extconf.rb, jalankan dengan opsi '--help'.

$ ruby extconf.rb [--with-openldap1|--with-openldap2| \
                   --with-netscape|--with-wldap32]
$ make
$ make install

NOTE- Jika Anda membuat perangkat lunak di Windows, Anda mungkin perlu menggunakan nmake daripada make .

Buat Koneksi LDAP

Ini adalah proses dua langkah -

Langkah 1 - Buat Objek Koneksi

Berikut ini adalah sintaks untuk membuat koneksi ke direktori LDAP.

LDAP::Conn.new(host = 'localhost', port = LDAP_PORT)
  • host- Ini adalah ID host yang menjalankan direktori LDAP. Kami akan menganggapnya sebagai localhost .

  • port- Ini adalah port yang digunakan untuk layanan LDAP. Port LDAP standar adalah 636 dan 389. Pastikan port mana yang digunakan di server Anda jika tidak, Anda dapat menggunakan LDAP :: LDAP_PORT.

Panggilan ini mengembalikan koneksi LDAP :: Conn baru ke server, host , pada port port .

Langkah 2 - Mengikat

Di sinilah kami biasanya menentukan nama pengguna dan kata sandi yang akan kami gunakan untuk sisa sesi.

Berikut adalah sintaks untuk mengikat koneksi LDAP, menggunakan DN, dn, kredensial, pwd, dan metode mengikat, method -

conn.bind(dn = nil, password = nil, method = LDAP::LDAP_AUTH_SIMPLE)do
....
end

Anda dapat menggunakan metode yang sama tanpa blok kode. Dalam kasus ini, Anda perlu melepaskan koneksi secara eksplisit sebagai berikut -

conn.bind(dn = nil, password = nil, method = LDAP::LDAP_AUTH_SIMPLE)
....
conn.unbind

Jika blok kode diberikan, self diserahkan ke blok tersebut.

Sekarang kita dapat melakukan pencarian, menambah, mengubah atau menghapus operasi di dalam blok metode bind (antara bind dan unbind), asalkan kita memiliki izin yang tepat.

Example

Dengan asumsi kita bekerja di server lokal, mari kita gabungkan semuanya dengan host, domain, id pengguna dan kata sandi yang sesuai, dll.

#/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

Menambahkan Entri LDAP

Menambahkan entri LDPA adalah proses dua langkah -

Langkah 1 - Membuat LDAP :: Mod objek

Kita membutuhkan metode LDAP :: Mod object pass to conn.add untuk membuat entri. Berikut ini sintaks sederhana untuk membuat LDAP :: Objek Mod -

Mod.new(mod_type, attr, vals)
  • mod_type - Satu atau lebih opsi LDAP_MOD_ADD, LDAP_MOD_REPLACE atau LDAP_MOD_DELETE.

  • attr - harus menjadi nama atribut yang akan dioperasikan.

  • vals- adalah larik nilai yang berkaitan dengan attr . Jika vals berisi data biner, mod_type harus secara logis OR'ed (|) dengan LDAP_MOD_BVALUES.

Panggilan ini mengembalikan objek LDAP :: Mod , yang dapat diteruskan ke metode di kelas LDAP :: Conn, seperti Conn # add, Conn # add_ext, Conn # modifikasikan dan Conn # modifik_ext.

Langkah 2 - Memanggil Metode conn.add

Setelah kita siap dengan objek LDAP :: Mod , kita dapat memanggil metode conn.add untuk membuat entri. Berikut adalah sintaks untuk memanggil metode ini -

conn.add(dn, attrs)

Metode ini menambahkan entri dengan DN, dn , dan atribut, attrs . Di sini, attrs harus berupa larik objek LDAP :: Mod atau hash dari pasangan larik atribut / nilai.

Example

Berikut adalah contoh lengkap, yang akan membuat dua entri direktori -

#/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

Mengubah Entri LDAP

Mengubah entri mirip dengan menambahkan satu. Panggil saja metode modifikasi daripada tambahkan dengan atribut yang akan dimodifikasi. Berikut adalah sintaks sederhana dari metode modifikasi .

conn.modify(dn, mods)

Metode ini memodifikasi entri dengan DN, dn , dan atribut, mod . Di sini, mod harus berupa larik objek LDAP :: Mod atau hash pasangan larik atribut / nilai.

Contoh

Untuk mengubah nama belakang entri, yang kami tambahkan di bagian sebelumnya, kami akan menulis -

#/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

Menghapus Entri LDAP

Untuk menghapus entri, panggil metode delete dengan nama yang dibedakan sebagai parameter. Berikut adalah sintaks sederhana dari metode delete .

conn.delete(dn)

Metode ini menghapus entri dengan DN, dn .

Contoh

Untuk menghapus entri Zara Mohtashim , yang kami tambahkan di bagian sebelumnya, kami akan menulis -

#/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

Memodifikasi Nama yang Dibedakan

Tidak mungkin mengubah nama yang dibedakan dari entri dengan metode modifikasi . Sebagai gantinya, gunakan metode modrdn . Berikut adalah sintaks sederhana dari metode modrdn -

conn.modrdn(dn, new_rdn, delete_old_rdn)

Metode ini memodifikasi RDN entri dengan DN, dn , memberikan RDN baru, new_rdn . Jika delete_old_rdn adalah benar , nilai RDN lama akan dihapus dari entri.

Contoh

Misalkan kita memiliki entri berikut -

dn: cn = Zara Ali,dc = localhost,dc = localdomain
cn: Zara Ali
sn: Ali
objectclass: person

Kemudian, kita dapat mengubah namanya yang berbeda dengan kode berikut -

#/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

Melakukan Pencarian

Untuk melakukan pencarian di direktori LDAP, gunakan metode pencarian dengan salah satu dari tiga mode pencarian yang berbeda -

  • LDAP_SCOPE_BASEM - Cari hanya node dasar.

  • LDAP_SCOPE_ONELEVEL - Cari semua anak dari simpul dasar.

  • LDAP_SCOPE_SUBTREE - Cari seluruh subpohon termasuk simpul dasar.

Contoh

Di sini, kita akan mencari seluruh subpohon dari entri dc = localhost, dc = localdomain untuk objek person -

#/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

Ini memanggil blok kode yang diberikan untuk setiap entri yang cocok di mana entri LDAP diwakili oleh turunan dari kelas LDAP :: Entry. Dengan parameter pencarian terakhir, Anda dapat menentukan atribut yang Anda minati, mengabaikan semua atribut lainnya. Jika Anda mengirimkan nil di sini, semua atribut dikembalikan sama seperti "PILIH *" dalam database relasional.

Metode dn (alias untuk get_dn) dari kelas LDAP :: Entry mengembalikan nama yang dibedakan dari entri tersebut, dan dengan metode to_hash, Anda bisa mendapatkan representasi hash dari atributnya (termasuk nama yang dibedakan). Untuk mendapatkan daftar atribut entri, gunakan metode attrs (alias untuk get_attributes). Selain itu, untuk mendapatkan daftar nilai satu atribut tertentu, gunakan metode vals (alias untuk get_values).

Penanganan Error

Ruby / LDAP mendefinisikan dua kelas pengecualian yang berbeda -

  • Jika terjadi error, metode baru, bind, atau unbind akan memunculkan pengecualian LDAP :: Error.

  • Dalam kasus menambah, mengubah, menghapus atau mencari direktori LDAP meningkatkan LDAP :: ResultError.

Bacaan lebih lanjut

Untuk detail lengkap tentang metode LDAP, lihat dokumentasi standar untuk Dokumentasi LDAP .