开发手册 欢迎您!
软件开发者资料库

Ruby - LDAP教程

Ruby LDAP教程 - 从简单和简单的步骤学习Ruby,从基本概念到高级概念,包括概述,环境设置,语法,类,变量,运算符,注释,If ... else,case,除非,循环,文件,I / O,函数,对象,TK,范围,迭代器,数组,字符串,方法,块,异常,面向对象,正则表达式,DBI,多线程,哈希,日期和时间,模块,LDAP,Web服务,Web编程,发送电子邮件,套接字编程,脚本语言,预定义常量,关联工具。

Ruby/LDAP是Ruby的扩展库.它提供了一些LDAP库的接口,如OpenLDAP,UMICH LDAP,Netscape SDK,ActiveDirectory.

应用程序开发的通用API在RFC1823中描述,并由Ruby/LDAP支持.

Ruby/LDAP安装

下载并安装完整的Ruby/LDAP软件包SOURCEFORGE.NET .

在安装Ruby/LDAP之前,请确保您拥有以下组件 :

  • Ruby 1.8.x(如果你想使用ldap/control,至少1.8.2).

  • OpenLDAP,Netscape SDK,Windows 2003或Windows XP.

现在,您可以使用标准的Ruby安装方法.在开始之前,如果您想查看extconf.rb的可用选项,请使用'--help'选项运行它.

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

注意 : 如果您在Windows上构建软件,则可能需要使用 nmake 而不是 make .

建立LDAP连接

这是一个两步的过程 :

Step 1 : 创建连接对象

以下是创建与LDAP目录的连接的语法.

LDAP::Conn.new(host = 'localhost', port = LDAP_PORT)

  • 主持人 : 这是运行LDAP目录的主机ID.我们将把它作为 localhost .

  • port : 这是用于LDAP服务的端口.标准LDAP端口是636和389.确保在您的服务器上使用哪个端口,否则您可以使用LDAP :: LDAP_PORT.

此调用在端口端口上返回到服务器 host 的新 LDAP :: Conn 连接.

第2步和第2步;绑定

这是我们通常指定用于会话其余部分的用户名和密码的地方.

以下是绑定的语法LDAP连接,使用DN, dn ,凭据, pwd 和绑定方法,方法 :

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

您可以在没有代码块的情况下使用相同的方法.在这种情况下,您需要显式取消绑定连接,如下所示 :

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

如果给出代码块, self 生成块.

我们现在可以在bind方法的块内(bind和unbind之间)执行搜索,添加,修改或删除操作,前提是我们有适当的权限.

示例

假设我们正在使用本地服务器,那就让我们把东西放到适当的主机上,域名,用户ID和密码等.

#/usr/bin/ruby -wrequire 'ldap'$HOST =    'localhost'$PORT =    LDAP::LDAP_PORT$SSLPORT = LDAP::LDAPS_PORTconn = LDAP::Conn.new($HOST, $PORT)conn.bind('cn = root, dc = localhost, dc = localdomain','secret')....conn.unbind

添加LDAP条目

添加LDPA条目是一个两步过程 :

第1步和第1步;创建 LDAP :: Mod 对象

我们需要 LDAP :: Mod 对象传递给 conn.add 创建条目的方法.这是一个简单的语法来创建 LDAP :: Mod 对象 :

Mod.new(mod_type, attr, vals)

  • mod_type : 一个或多个选项LDAP_MOD_ADD,LDAP_MOD_REPLACE或LDAP_MOD_DELETE.

  • attr : 应该是要操作的属性的名称.

  • vals : 是与 attr 有关的值数组.如果 vals 包含二进制数据,则 mod_type 应与LDAP_MOD_BVALUES进行逻辑"或"(<).

此调用返回 LDAP :: Mod 对象,该对象可以传递给LDAP :: Conn类中的方法,例如Conn #add,Conn#add_ext,Conn #modvert和Conn #modate_ext.

步骤2 : 调用 conn.add 方法

一旦我们准备好了 LDAP :: Mod 对象,我们就可以调用 conn.add 创建条目的方法.以下是调用此方法的语法 :

conn.add(dn, attrs)

此方法添加一个带有DN, dn 和属性 attrs 的条目.这里, attrs 应该是 LDAP :: Mod 对象的数组或属性/值数组对的散列.

示例

这是一个完整的示例,它将创建两个目录条目 :

#/usr/bin/ruby -wrequire 'ldap'$HOST =    'localhost'$PORT =    LDAP::LDAP_PORT$SSLPORT = LDAP::LDAPS_PORTconn = 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")   exitendconn.perror("add")conn.unbind

修改LDAP条目

修改条目与添加条目类似.只需使用要修改的属性调用 modify 方法而不是 add .这是修改方法的简单语法.

conn.modify(dn,mods)

此方法使用DN, dn 和属性 mods 修改条目.这里, mods 应该是 LDAP :: Mod 对象的数组或属性/值数组对的散列.

示例

要修改我们在上一节中添加的条目的姓氏,我们将写入 :

#/usr/bin/ruby -wrequire 'ldap'$HOST =    'localhost'$PORT =    LDAP::LDAP_PORT$SSLPORT = LDAP::LDAPS_PORTconn = 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")   exitendconn.perror("modify")conn.unbind

删除LDAP条目

要删除条目,使用专有名称作为参数调用 delete 方法.这是 delete 方法的简单语法.

conn.delete(dn)

此方法删除DN为 dn 的条目.

示例

要删除我们在上一节中添加的 Zara Mohtashim 条目,我们会写 :

#/usr/bin/ruby -wrequire 'ldap'$HOST =    'localhost'$PORT =    LDAP::LDAP_PORT$SSLPORT = LDAP::LDAPS_PORTconn = 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")   exitendconn.perror("delete")conn.unbind

修改专有名称

无法修改di带有修改方法的条目的标题名称.而是使用 modrdn 方法.这是 modrdn 方法的简单语法 :

conn.modrdn(dn, new_rdn, delete_old_rdn)

此方法使用DN dn 修改条目的RDN,为其提供新的RDN new_rdn .如果 delete_old_rdn true ,旧的RDN值将从条目中删除.

示例

假设我们有以下条目 :

dn: cn = Zara Ali,dc = localhost,dc = localdomaincn: Zara Alisn: Aliobjectclass: person

然后,我们可以使用以下代码修改其专有名称 :

#/usr/bin/ruby -wrequire 'ldap'$HOST =    'localhost'$PORT =    LDAP::LDAP_PORT$SSLPORT = LDAP::LDAPS_PORTconn = 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")   exitend方法使用三种不同的搜索模式之一 :