jinyedge's note
{http://www.jinyedge.pe.kr}
Hi, this is jinyedge. I'm a software developer.
I hope you can find some useful information
in my homepage.
jinyedge at gmail.com
Since 2001.12.05
|
|
| Subj: Perl, Retrieving users from Active Directory using LDAP::Contrl::Paged. |
|
|
Mtime: 2010-03-26 00:33:31 |
|
|
#!/usr/bin/perl
#########################################################
# Retrieving users from Active Directory.
#
# @author jinyedge
#########################################################
use strict;
use Net::LDAP;
use Net::LDAP::Control::Paged;
use Net::LDAP::Constant qw(LDAP_CONTROL_PAGED);
#------------------------------------------------------
sub get_ldap_pages{
my $ldap = shift;
my $base = shift;
my $attrs = shift;
my $filter = shift;
my $control = Net::LDAP::Control::Paged->new(size => 1000);
my @args = (
base => $base
, scope => "sub"
, attrs => $attrs
, filter => $filter
, control => [$control]
);
my $cookie;
my $rset;
my @pages;
while($rset = $ldap->search(@args)) {
# fatal on search error
if($rset->code){
@pages = ();
last;
}
push @pages, $rset->as_struct;
# handle next search page
my($resp) = $rset->control(LDAP_CONTROL_PAGED);
$cookie = $resp->cookie or last;
$control->cookie($cookie);
}
# be nice to the server and stop the search if we still have a cookie
if($cookie){
$control->cookie($cookie);
$control->size(0);
$ldap->search(@args);
}
return \@pages;
}
#------------------------------------------------------
sub ldap_page{
my $ldap = Net::LDAP->new("192.168.0.5") or die $@;
my $resp = $ldap->bind("administrator\@rainbowx.net", password => "7842", version => 3);
die "error binding to ad ldap: ", $resp->error if ($resp->code);
my $pages = get_ldap_pages(
$ldap
, "dc=rainbowx,dc=net"
, ["samaccountname", "primarygroupid", "memberof"]
, "(&(objectclass=user)(!(objectclass=computer)))"
);
for my $href(@$pages){
while(my($k, $v) = each(%$href)){
my $un = $v->{"samaccountname"}->[0];
print "$un\n";
}
}
$ldap->unbind;
}
#------------------------------------------------------
# Main.
ldap_page();
|
|
|
|
|