Has anybody considered an "autopage" option for Net::LDAP? Sure would be nice to be able to do something like this:
$ldap = Net::LDAP->new( 'ldap.bigfoot.com', autopage => 500 ) or die "$@"; $ldap->search(... I may look at doing it myself if no one else is working on it. -----Original Message----- From: Don Miller [mailto:[EMAIL PROTECTED] Sent: Tuesday, July 06, 2004 8:48 AM Cc: [EMAIL PROTECTED] Subject: Re: RE: Active Directory and LDAP sizelimit Here is a script with the jist of using a paged search. I chopped it up from something I am currently using so it does work. :) use Net::LDAP; use Net::LDAP::Control::Paged; use Net::LDAP::Constant qw(LDAP_CONTROL_PAGED); my $ad_ldap = Net::LDAP->new($ad_ldap_server, version => 3) or die "unable to co nnect to ad ldap: $@"; my $result = $ad_ldap->bind($ad_ldap_dn, password => $ad_ldap_password); die "error binding to ad ldap: ",$result->error if ($result->code); # AD requires paged searches to return more than 1000 objects my $page = Net::LDAP::Control::Paged->new(size => 500); my $cookie; my @args = ( 'base' => 'dc=microsoft,dc=local', 'filter' => '(&(objectclass=person)(!(objectclass=computer)))', 'attrs' => [ 'cn' ], 'control' => [ $page ], ); while ($ad_search = $ad_ldap->search(@args)) { # fatal on search error die "error searching ad ldap: ",$ad_search->error if ($ad_search->code); while (my $ad_user = $ad_search->shift_entry) { # handle next search page my ($resp) = $ad_search->control(LDAP_CONTROL_PAGED); $cookie = $resp->cookie or last; $page->cookie($cookie); } # be nice to the server and stop the search if we still have a cookie if ($cookie) { $page->cookie($cookie); $page->size(0); $ad_ldap->search(@args); } $ad_ldap->unbind; ----- Original Message ----- From: Rick Tatem <[EMAIL PROTECTED]> Date: Tuesday, July 6, 2004 6:19 am Subject: RE: Active Directory and LDAP sizelimit > The 1000 limit on the result set is due to the 'PageSize' limit. > A paged query should return them all (just not all at once... oh, > and provided that all the Ous are actually searchable by your > process). > I've not used it, but you should probably try > Net::LDAP::Control::Paged > http://search.cpan.org/~gbarr/perl-ldap/lib/Net/LDAP/Control/Paged.pm > > Rick > --- > Rick Tatem > > > -----Original Message----- > From: Jensen, John T [EMAIL PROTECTED] > Sent: Monday, July 05, 2004 10:38 PM > To: Johnson, Brian K; Jensen, John T; [EMAIL PROTECTED] > Subject: RE: Active Directory and LDAP sizelimit > > Thanks, Brian. I had finally got someone to point me to ntdsutil - > now I'm trying to make it work. The various on-line things from > Microsoft aren't that informative. But at least I now know where to > look. > > > > jj > > John Thayer Jensen, System Administrator Computing Service, School > of Business University of Auckland > > Room 256, 15 Wynyard Street > > voice: +64 9 373-7599 ext 87543 > FAX: +64 9 373-7696 > mobile: +64 21 049-7702 > quickdial: 60001 > > http://staff.business.auckland.ac.nz/~j.jensen > -----Original Message----- > From: Johnson, Brian K [EMAIL PROTECTED] > Sent: Tuesday, 6 July 2004 2:15 p.m. > To: Jensen, John T; [EMAIL PROTECTED] > Subject: RE: Active Directory and LDAP sizelimit > > Hi, > > Windows 2000 AD has a default limit of 1000. I THINK you can > change this with the ntdsutil.exe utility on a domain controller. > This utility can be used to examine and set LDAP parameters in AD. > I THINK that these settings are global for your entire forest. The > Q article: > http://support.microsoft.com/?kbid=271088 goes into detail as to > how to use this utility. > http://www.jsiinc.com/SUBJ/tip4600/rh4678.htm explains the units > of the various AD LDAP parameters. Also, Active Directory supports > paged searches....which is what I do to retrieve more than 1000 > objects. Using paged controls I routinely retrieve 20-30K objects > via a single query from my AD forest which has the default setting > of 1000 for MaxPageSize. > > > -----Original Message----- > From: Jensen, John T [EMAIL PROTECTED] > Sent: Monday, July 05, 2004 3:40 PM > To: [EMAIL PROTECTED] > Subject: Active Directory and LDAP sizelimit > > From: > > http://msdn.microsoft.com/library/default.asp?url=/library/en- > us/vbcon/html/vbtsksearchingactivedirectoryhierarchy.asp > > "The maximum number of entries to return by setting the SizeLimit > property. > Note If the maximum number of returned entries and TimeLimit > properties exceed limitations set on the server, the server > settings will override the component settings." > > If I set sizelimit in the Perl script to something LESS than 1000, > that works. I get the smaller number of returns. If I set it to > anything more, or to 0 (which is supposed to give unlimited > returns), I can only get 1000. > > I believe Perl and Net::LDAP are working properly. I think the > problem is this mysterious "limitations set on the server" that is > stopping me. > And I can't figure out how to change that. > > > > jj > > John Thayer Jensen, System Administrator Computing Service, School > of Business University of Auckland > > Room 256, 15 Wynyard Street > > voice: +64 9 373-7599 ext 87543 > FAX: +64 9 373-7696 > mobile: +64 21 049-7702 > quickdial: 60001 > > http://staff.business.auckland.ac.nz/~j.jensen > -----Original Message----- > From: Jensen, John T [EMAIL PROTECTED] > Sent: Tuesday, 6 July 2004 9:23 a.m. > To: [EMAIL PROTECTED] > Subject: RE: Scope=>'sub' not working?? > > Stranger and stranger. I just did a comparison of the two searches. > The top-down one gets 265 out of 651 objects in the OU. I am > beginning to suspect some limit on the number of returned objects > allowed. I seem to recall once hitting a 1000-object limit on AD LDAP > returns - which is killing for ADs of our size. > > > > jj > > John Thayer Jensen, System Administrator Computing Service, School > of Business University of Auckland > > Room 256, 15 Wynyard Street > > voice: +64 9 373-7599 ext 87543 > FAX: +64 9 373-7696 > mobile: +64 21 049-7702 > quickdial: 60001 > > http://staff.business.auckland.ac.nz/~j.jensen > -----Original Message----- > From: Jensen, John T > Sent: Tuesday, 6 July 2004 8:34 a.m. > To: [EMAIL PROTECTED] > Subject: Scope=>'sub' not working?? > > I'm trying to search the whole of our AD for computer objects > (using the Perl Net::LDAP module). I just put in as searchbase: > > my $searchbase='DC=com,DC=unet,DC=auckland,DC=ac,DC=nz'; > > Looking for computers so I put in: > > my $filter="(&(objectclass=User)(objectcategory=computer))"; > > I do a search: > > my > $results=$ad->search(base=>$searchbase,filter=>$filter,attrs=>$attrs); > > (scope=>'sub' is supposed to be the default, but I have also tried > with: > my > $results=$ad- > >search(base=>$searchbase,filter=>$filter,scope=>'sub',attrs=>$attrs); > > ) > > I don't get everything. If I put in a full OU: > > my $searchbase='OU=Staff Computers,OU=COM > Computers,DC=com,DC=unet,DC=auckland,DC=ac,DC=nz'; > I get objects under that OU. I haven't yet looked to see whether > my scope=>'sub' search gets some of those computers or not. But I > don't want to look under a particular OU; I want to look in the > whole AD - one of the things I am looking for is computers that > have got into the wrong location. > > > > jj > > John Thayer Jensen, System Administrator Computing Service, School > of Business University of Auckland > > Room 256, 15 Wynyard Street > > voice: +64 9 373-7599 ext 87543 > FAX: +64 9 373-7696 > mobile: +64 21 049-7702 > quickdial: 60001 > > http://staff.business.auckland.ac.nz/~j.jensen > > >