Thanks contributors, especially Don for the 'range=0-*' tip.  That did
the trick.

Also thanks to Graham Barr for the 'debug => 15' tip, which showed I
was getting the data back ok but not displaying it because the
attribute in get_value has to be something like
 'member;range=1000-1999' as opposed to 'member'

  Mike




2010/3/29 Miller, Don C. <d...@uidaho.edu>:
> The -limit option for dsquery deals with the paging not with attributes.
> There was discussion on this topic a few years back and you can request
> the attribute with an additional range argument 'member;Range=0-*'.
> Hopefully this will provide you with consistent results.  You could also
> do your own member "paging" by changing the ranges until no members are
> returned.
>
> Don
>
> -----Original Message-----
> From: Spurrell Simon (KIDG 61) [mailto:simon.spurr...@credit-suisse.com]
>
> Sent: Monday, March 29, 2010 6:59 AM
> To: Prentice Bisbal; perl-ldap@perl.org
> Subject: RE: search for one object with thousands of members fails
>
> Yes I believe the AD does have a limit.
>
> I was using dsquery in the old days working in Exchange and AD.
>
> dsquery * domainroot -filter
> "(&(objectCategory=Person)(!objectClass=contact))" -limit 0 -attr name
> department displayName
>
> the "-limit 0" would make sure all attributes for all objects were
> returned.
>
>
>
>
> -----Original Message-----
> From: Prentice Bisbal [mailto:prent...@ias.edu]
> Sent: Monday, March 29, 2010 3:43 PM
> To: perl-ldap@perl.org
> Subject: Re: search for one object with thousands of members fails
>
> OpenLDAP, by default, limits the number of returned results to only 500,
> except for the admin user. Is it possible that AD has similar default
> limits? There should be some way to override that limit. Not sure if the
> line
>
> my $page = Net::LDAP::Control::Paged->new(size =>  500)
>
> affects that limit.
>
> Prentice
>
>
> Michael McGovern wrote:
>> I'm trying to extract a list of the members of of a Global Group in
> AD.
>> It works for groups with a small number (hundreds) of members but not
>> for one with thousands. I don't even get the first few hundred of the
>> large group.
>>
>> I've tried using LDAP_CONTROL_PAGED, but I think that it controls
>> paging of large numbers of objects rather than single objects with
>> large numbers of members.
>>
>> I would welcome suggestions to get around this problem Code snippet:
>> ======================================================
>> use Net::LDAP;
>> use Net::LDAP::Control::Paged;
>> use Net::LDAP::Constant qw(LDAP_CONTROL_PAGED); use Net::LDAP::Util
>> qw(ldap_error_text ldap_error_name
> ldap_error_desc);
>> $ldap_server = "college.my.dom";
>> $bind_user   = "myuser";
>> $bind_pass   = "mypassword";
>> $ldap_base   = "ou=Global Groups,dc=COLLEGE,dc=my,dc=dom";
>> $ldap = Net::LDAP->new($ldap_server, debug => 0 ) or die "$@";
>> $ldap->bind($bind_user,password=>$bind_pass) or die "$@";
>> $group="students"; my $page = Net::LDAP::Control::Paged->new(size =>
>> 500); my $cookie; my @args = (
>>       base => $ldap_base,
>>       filter => "(cn=$group)",
>>       attr => "member",
>>       callback => \&process_entry,
>>       control => [ $page ] );
>>
>> while ($results = $ldap->search(@args)) {
>>    ($conres) = $results->control(LDAP_CONTROL_PAGED);
>>    $cookie = $conres->cookie or last;
>>    warn "got cookie\n"; # I never get a cookie, because there's only
> one object?
>>    $page->cookie($cookie);
>> };
>>
>> sub process_entry {
>>    my $mesg = shift;
>>    my $entry = shift;
>>    (warn "end of entry\n", return) unless $entry;
>>       foreach ( $entry->get_value("member")) {
>>            # process member
>>       };
>> }
>> ======================================================
>>
>>
>>   Mike
>>
>
> --
> Prentice Bisbal
> Linux Software Support Specialist/System Administrator School of Natural
> Sciences Institute for Advanced Study Princeton, NJ
>

Reply via email to