添加条目
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 (
Comments
There are currently no comments
New Comment