• perl 使用LDAP模块


    一.需求分析
    最近有个需求,就是编写脚本来显示LDAP服务器里面某些用户里面的某些字段,如
    uid, uidNumber, 等等,网上查了下资料,发现可以使用perl里面的perl-ldap包来实现。

    二. 测试环境

    test@camlit ~: uname -m
    x86_64
    test@camlit ~: cat /etc/issue
    CentOS release 5.4 (Final)
    test@camlit ~: perl -v
    This is perl, v5.8.8 built for x86_64-linux-thread-multi
    test@camlit ~: rpm -qa |grep perl-LDAP
    perl-LDAP-0.33-3.fc6



    三.基本用法

    和其他的Perl 库一样,perl-ldap也是调用use 声明,
    如下所示:

    1. use Net::LDAP ;
    复制代码

    打开一个新的LDAP连接,可以使用new()函数来实现,例如打开一个主机名为:
    test.com.cn的机器,可以如下所示:

    1. $ldap = Net::LDAP->new(“test.com.cn”);
    复制代码

    备注:
    在这里,并没有指定特定的端口号,perl-ldap假设了默认的端口号:389,这个是默认
    的LDAP服务的端口号,如果你使用的是不同的端口,如1389 ,那么就需要port参数,

    如下所示:

    1. $ldap = Net::LDAP->new(“test.com.cn”, port=>1389);
    复制代码

    如果那个机器无法连接,上面的函数调用将在120秒返回错误信息,也可以使用
    timeout 参数来指定超时时间,如下所示:

    1. $ldap = Net::LDAP->new(“test.com.cn”, timeout=>30);
    复制代码

    当连接建立好后,可以使用”perldoc Net::LDAP”命令来查询更加详细的说明。所有的
    perl-ldap 函数都可以使用手册里面的方法来访问。

    常见的perl-ldap方法有:

    $ldap->add(); #Add an entry to the server
    $ldap->bind(); #Bind to a directory server
    $ldap->delete(); #Delete an entry from the server
    $ldap->moddn(); #Modify an entry's Distinguished Name
    $ldap->modify(); #Modify the contents of an entry
    $ldap->search(); #Perform a search on a directory
    $ldap->unbind(); #Unbind from a server




    四.几个例子
    1. add()用法:
    如果有很多用户在你的系统里面,也许你不希望通过GUI之类的工具手动一个一个的
    添加,所以可以编写脚本来实现快速增加用户,或者编写基于Web界面的系统可以让
    每个人在上面填写自己的相关信息,而这个信息会自动的添加到LDAP服务里面。
    这里我们使用add()方法来增加用户:

    1. $result = $ldap->add("uid=john,ou=People,dc=test,dc=com,dc=cn",
    2. attr => [ 'cn' => 'John Smith',
    3. 'sn' => 'Smith',
    4. 'uid'=> 'john',
    5. 'mail' => 'john@test.com.cn',
    6. 'objectclass' => [ 'top','person','organizationalPerson', 'inetOrgPerson']
    7. ]
    复制代码

    上面的代码的作用是向LDAP里面增加了一个”John”帐号。正如你看到的那样,LDAP
    里面的“Attributes”属性都被attr参数所提供了。

    2.delete()用法:
    使用该方法来从LDAP里面删除用户 ,如下:

    1. $dn=”uid=test1,ou=People,dc=test,dc=com,dc=cn”;
    2. $ldap->delete($dn);
    复制代码

    3.search()用法:
    此方法是用来查询用户相关信息,如下:

    1. $mesg = $ldap->search( filter =>"(uid=test)",
    2. base => "ou=People,dc=test,dc=com,dc=cn",
    3. attrs => ['uid','uidNumber'] );
    复制代码

    备注:
    search()方法返回的是Net::LDAP:Search对象,所以最简单的方式能得到该对象的结果
    内容就是使用entries()方法,该方法会返回Net::LDAP:Entry对象数组。

    如:

    1. @entries = $mesg-> entries;
    复制代码

    一些其他有用的方法:

    $mesg->count; The number of entries returned in the search
    $mesg->entry(n); Return the n'th entry (initial entry is 0)



    一个简单查询的例子:
    test@camlit ~: cat query_ldap.pl

    1. #!/usr/bin/perl
    2. use Net::LDAP;
    3. $ldap = Net::LDAP->new ("192.168.56.101") or die "$@";
    4. $ldap->bind;
    5. $mesg = $ldap->search(base => "dc=test,dc=com,dc=cn",
    6. filter => "(objectClass=organizationalPerson)");
    7. @entries = $mesg->entries;
    8. foreach $entry (@entries){
    9. $entry->dump; # 作用是:把结果显示到标准输出,即终端。
    10. }
    复制代码

    4.modify()用法:
    该方法是用来修改用户相关信息,如下:

    1. $dn = "uid=harry,ou=People,dc=test,dc=com,dc=cn";
    2. $mesg = $ldap->modify($dn, replace => { "mail" => "harry\@mail.test.com"});
    复制代码

    总结:
    在perl脚本中使用perl-ldap来处理关于LDAP一些操作是比较方便的,另外它为管理
    和维护拥有大量用户的服务提供简单的方法。

  • 相关阅读:
    java中的拷贝(二)深克隆
    java中的拷贝(一)
    java类的访问权限
    对象和对象引用
    equals和==
    类与继承(一)
    WebSocket简单介绍
    php获取请求的方式(get/post)
    php 使用jquery实现ajax
    PHP 系统常量及自定义常量
  • 原文地址:https://www.cnblogs.com/agostop/p/2382335.html
Copyright © 2020-2023  润新知