Perl Net::LDAP模块

(0 comments)

添加条目

use Net::LDAP;
 
$ldap = Net::LDAP->new( 'ldap.liaojl.com' ) or die "$@";
 
# bind to a directory with dn and password
$mesg = $ldap->bind( 'cn=manager, dc=liaojl, dc=com',  
                 password => 'password'
           );
 
$result = $ldap->add( 'cn=Daniel Liao, dc=liaojl, dc=com',
                  attr => [
                   'cn'   => ['Daniel Liao', 'JL Liao'],
                   'sn'   => 'Liao',
                   'mail' => 'liaojl@liaojl.com',
                   'objectclass' => ['top', 'person',
                               'organizationalPerson',
                               'inetOrgPerson' ],
                 ]
             );
 
$result->code && warn "Warning: ", $result->error ;
$mesg = $ldap->unbind;  # take down session

搜索条目

use Net::LDAP;
 
$ldap = Net::LDAP->new( 'ldap.liaojl.com' ) or die "$@";
 
# bind to a directory with dn and password
$mesg = $ldap->bind( 'cn=manager, dc=liaojl, dc=com',
             password => 'password'
          );
 
$result = $ldap->search( # perform a search
             base   => "ou=Aliases, dc=liaojl, dc=com", 
             filter => "(&(sendmailMTAAliasValue=liaojl))"
          );
 
$result->code && die $result->error;
 
foreach $entry ($result->entries) { $entry->dump; }
 
$mesg = $ldap->unbind;   # take down session

如果结果中只需要某个属性,在search条件中添加关键字,例如:attrs =>['sendmailMTAAliasValue']。返回的结果$entry是一个Net::LDAP::Entry对象,通过get_value方法可以得到返回值:

df. $entry->get_value('sendmailMTAAliasValue');

下面的一段代码可以遍历整个结果集中的所有属性和值:

foreach my $attr ( $entry->attributes ) {
  print join("\n", $attr, $entry->get_value($attr)), "\n";
}

删除条目

use Net::LDAP;
 
$ldap = Net::LDAP->new( 'ldap.liaojl.com' ) or die "$@";
 
# bind to a directory with dn and password
$mesg = $ldap->bind( 'cn=manager, dc=liaojl, dc=com',
                   password => 'password'
                   );
$dn = 'cn=Barbara Jensen, dc=liaojl, dc=com';
$result = $ldap->delete( $dn );
 
$result->code && warn "Warning ", $result->error;
$mesg = $ldap->unbind;  # take down session

修改属性

use Net::LDAP;
 
$ldap = Net::LDAP->new( 'ldap.liaojl.com' ) or die "$@";
 
# bind to a directory with dn and password
$mesg = $ldap->bind( 'cn=manager, dc=liaojl, dc=com',
                   password => 'password'
               );

$dn = 'cn=Daniel Liao, dc=liaojl, dc=com';
 
$result = $ldap->modify( $dn, add => { sn => 'Liao' } );
 
$result = $ldap->modify( $dn, delete => [qw(faxNumber)] );
 
$result = $ldap->modify( $dn, delete => { 'mobile' => '911' } );  
 
$result = $ldap->modify( $dn, replace => { 'mail' => 'liaojl@liaojl.com' });
 
$result = $ldap->modify( $dn,
               changes => [
                   # add sn=Barr
                   add     => [ sn => 'Liao' ],
                   # delete all fax numbers
                   delete  => [ faxNumber => []],
                   # delete phone number 911
                   delete  => [ mobile => ['911']],
                   # change email address
                   replace => [ mail => 'liaojl@liaojl.com']
                 ]
             );
 
$result->code && warn "failed to delete entry: ", $result->error ;
$mesg = $ldap->unbind;  # take down session

上面例子中,前四条$ldap→modify语句每次修改一个属性。第五条语句一次修改多个属性。注意:replace时,无论有原来有多少个mail属性,替换后只剩下指定的一个属性。

批量修改

先按条件搜索,然后批量修改。

use Net::LDAP;
use Net::LDAP::Entry;
 
$ldap = Net::LDAP->new('ldap.liaojl.com') or die "$@";
 
# bind to a directory with dn and password
$mesg = $ldap->bind( 'cn=manager, dc=liaojl, dc=com',
                     password => 'password'
            );
# Get All users
$result = $ldap->search( # perform a search
              base   => "ou=Aliases, dc=liaojl, dc=com",
              filter => "(&(objectClass=insightResource))",
              attrs => ['mail']
            );
 
$result->code && die $result->error;
 
 
foreach $entry ($result->entries) { 
  $mail = $entry->get_value("mail"); 
  $mail =~ s/liaojl.com/cn.liaojl.com/;   
 
  $entry->replace (
Currently unrated

Comments

There are currently no comments

New Comment

required

required (not published)

optional

required