hi,

following the FAQ (
http://search.cpan.org/~marschap/perl-ldap-0.65/lib/Net/LDAP/FAQ.pod#How_do_I_search_for_all_members_of_a_large_group_in_AD
?)

I successfully retrieve all members of a large group, nice.

The example searchs only using scope 'base' and as base the group
distinguishedname.

If I change that to

base = "dc=domain,dc=tld",
scope = "sub",

it finds just one group:

my $mesg;
my @members;
my $samaccount;
my $index = 0;

while ( $index ne '*' ) {
    $mesg = $ldapprod->search(
        base   => $prod_base,
        filter => "(objectclass=group)",
        scope  => 'sub',
        attrs  => [ ( $index > 0 ) ? "member;range=$index-*" : 'member',
'samaccountname', ]
    );
    if ( $mesg->code == LDAP_SUCCESS ) {
        my $entry = $mesg->entry(0);
        my $attr;

        # large group:
        if ( ($attr) = grep( /^member;range=/, $entry->attributes ) ) {
            push( @members, $entry->get_value($attr) );
            $samaccount = $entry->get_value('samaccountname');

            if ( $attr =~ /^member;range=\d+-(.*)$/ ) {
                $index = $1;
                $index++ if ( $index ne '*' );
            }
        }

        # small group:
        else {
            @members = $entry->get_value('member');
            $samaccount = $entry->get_value('samaccountname');
            last;
        }
    }

    # failure
    else {
        last;
    }
}

if ( $mesg->code == LDAP_SUCCESS ) {
    for (@members) {
        print "$_\n";
    }
    print "Group: $samaccount\n";
}

I'm obviously doing something wrong. Do I need to get the groups
distinguishedname and then use the scope 'base' to look at membership of
all groups?

Thanks for your advice.


-- 
--
Groeten,
natxo

Reply via email to