I don't believe that this should be a parameter to the constructor.

Maybe it could be done as a paged option to ->search and the ::Search object that is returned could support a next_page method, or something like that.

Graham.

On 6 Jul 2004, at 16:56, Ken Cornetet wrote:

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









Reply via email to