Here is how I do it, this is just a piecemeal representation of a script
that I currently use but hopefully lyou get the idea.

use Net::LDAPS;
use Net::LDAP::Control::Paged;
use Net::LDAP::Constant qw( LDAP_CONTROL_PAGED );

my $ldap = Net::LDAPS->new($addr) or die "LDAP server could not be
contacted. Error:$@";
my $page = Net::LDAP::Control::Paged->new( size => 100 );

### binds to DC using above credentials

my $login = $ldap->bind($user, password=> $pass);
my $iserr = $login->is_error;
if ($iserr)     {       # success returns 0
       print "Authentication failed\n";
       exit;
}

my @srcargs1 = (        base    => $path,
                       scope   => "sub",
                       filter  => "(objectClass=group)",
                       control => [ $page ],
);

### Main program loop

while (1)       {


       $search = $ldap->search(@srcargs1);
       if ($search->code)      {               # successful search returns
0
               exit print "LDAP Search Failed $?\n";
       }

       foreach $entry ($search->entries)       {

               my $grpname = $entry->get_value("name");
               print "Group name is: $grpname\n";

       }

       ### After foreach loops ends, client checks LDAP server reponse of
how many search results total.
       ### This is a control to end the infinite while loop if there are no
search results to go through
       ### If there are search results, this control will always return the
total number of results. It is
       ### never decremented
       my ($resp) = $search->control( LDAP_CONTROL_PAGED ) or last;


       ### Obtaining the cookie from the search result. When no more
results, cookie will be NULL
       ### and infinite while loop will terminate.
       $cookie = $resp->cookie or last;


       ### Sets cookie so server knows the next search result to send
       $page->cookie($cookie);
}

### This is a control to check for abnormal exit of the while loop. If this
occurs
### we need to tell the LDAP server that remaining search results are no
longer needed
### by sending a search request with a page size of 0
if ($cookie)    {
       $page->cookie($cookie);
       $page->size(0);
       $ldap->search(@srcargs1);
}





On 1/19/07, Graham Barr <[EMAIL PROTECTED]> wrote:

Begin forwarded message:
> From: <[EMAIL PROTECTED]>
> Date: January 18, 2007 2:27:35 PM CST
> To: <[EMAIL PROTECTED]>
> Subject: Net::LDAP - AD paging
> Message-Id:
> <[EMAIL PROTECTED]>
>
> Graham,
>
>     I need to do an LDAP search, via Net::LDAP, on a AD server.
> Since I receive back only 1000 objects, I would like to use the
> "paging" feature to receive all responses from my server.
>
>     Do you have any example on how to do paging search via your
> Net::LDAP module?  I search over the web and I found no example...
>
>     Thanks a lot for any help!
>
>     Bye!
>
> ----
> Dominic Dupuis
> Services Techniques
> Direction Bureautique
> Maintenance serveurs
> Tél: 514-840-3000 x6241
> [EMAIL PROTECTED]
> <blocked::blocked::mailto:[EMAIL PROTECTED]>


Reply via email to