Here is a link to an expired draft which seems to describe what MS implmented.
http://www.tkk.fi/cc/docs/kerberos/draft-kashi-incremental-00.txt Graham. On Wed, December 13, 2006 10:02 am, Megan Kielman wrote: > Don, > > That dawned on me last night! I think I have one last questions > regarding the '*'. Is that considered a wildcard? > > Since I cannot request a range that exceeds the number of users, and > the wild card apparently doesn't work for me, is the best way to > handle it to continue to request a smaller range until I hit the exact > number of users? If that is the case, it seems like I would be > storming the DC with requests. > > On 12/13/06, Don C. Miller <[EMAIL PROTECTED]> wrote: >> Megan, a search will only return one range. You need to do a separate >> search for each loop of your code requesting each different range until >> you hit *. >> >> Don >> >> -----Original Message----- >> From: Megan Kielman [mailto:[EMAIL PROTECTED] >> Sent: Tuesday, December 12, 2006 3:01 PM >> To: Don C. Miller >> Cc: Perl-LDAP Mailing List >> Subject: Re: Net::LDAP search - active directory not returning member >> list for large group >> >> Don, >> >> I can't seem to get Range=0-* to return anything. The best I have been >> able to do is query Range=0-1499, or another combination that is less >> then the total number of members (1658). >> >> I did try $entry->dump which did show me all the attributes of that >> objects but I really need a way to recursively query AD until I get all >> members of the groups. My email to Glenn and the list shows the code I >> am using. but just in case: >> >> unless (@members) { >> $size = 1500; >> $first = 0; >> while (1) { >> $last = $first + $size -1; >> @tmp = >> $entry->get_value("member;Range=${first}-${last}"); >> unless (@tmp) { >> @tmp = >> $entry->get_value("member;Range=${first}-*"); >> unless (@tmp) { >> last; >> } >> } >> push @members, @tmp; >> $first += $size; >> } >> } >> >> >> >> >> This is getting frustrating... >> >> On 12/12/06, Don C. Miller <[EMAIL PROTECTED]> wrote: >> > Megan, when I was doing testing with this I noticed there was some >> > type of caching occuring with the requests. I waited a while and >> > since then I have been able to use the member;Range=0-* for every size >> >> > group (use it in both the attr list and get_value). It would be a >> > good idea to check for the existance of other ranges in the return >> set. >> > >> > As for your comment on get_value("member"). This is where you want to >> >> > use "member;Range=0-999" when you have just "member" in the attribute >> > list, not vice versa. If you use $entry->dump you will see what the >> > object contains in a nice readable form. >> > >> > Don >> > >> > use Net::LDAP; >> > my $ad_ldap = Net::LDAP->new('server'); my $error = >> > $ad_ldap->bind('dn', password => 'pass'); my $group_search = undef; >> > $group_search = $ad_ldap->search( >> > 'base' => 'dc=contoso,dc=msft', >> > 'filter' => "(&(objectClass=group)(samaccountname=mygroup))", >> > 'attrs' => [ 'samaccountname', 'member;Range=0-*' ] ); die if >> > ($group_search->code); print $group_search->entry(0)->dump; my >> > @members = $group_search->entry(0)->get_value('member;Range=0-*'); >> > print $#members; >> > $ad_ldap->unbind; >> > >> > -----Original Message----- >> > From: Megan Kielman [mailto:[EMAIL PROTECTED] >> > Sent: Monday, December 11, 2006 9:58 PM >> > To: Don C. Miller >> > Cc: Perl-LDAP Mailing List >> > Subject: Re: Net::LDAP search - active directory not returning member >> > list for large group >> > >> > Don, >> > >> > Thanks for the response. >> > >> > First of all you mentioned that if you don't specify a range and the >> > group contains more then 1000 users, $entry->get_value("member") will >> > return 'member;Range=0-999', however, in my case it doesn't appear to >> > return anything becuase when I loop through the @members, it is empty. >> > >> > I tried using ('member;Range=0-*') and I still got nothing. >> > >> > I played around with the Range and specified an upper limit like 0-100 >> >> > and 100 of the users were returned. This method will work for this >> > script because I am simply trying to determine if a group is empty, >> > however, I may want the ability to return all members of a group, >> > regardless of how many members there are. >> > >> > Thanks! >> > >> > >> > On 12/11/06, Don C. Miller <[EMAIL PROTECTED]> wrote: >> > > Megan, I hope everything is going well for you. The trick for >> > > getting >> > >> > > this to work is to request the attribute 'member;Range=0-*' and then >> >> > > get_value('member;Range=0-*'). This should work on a group any size >> >> > > although I haven't tested on enormous groups. The 'Range' is case >> > > sensitive when requesting the attr but not on get_value. By default >> >> > > if the group has more than 1000 users, and you don't specify a >> > > range, it will return 'member;Range=0-999'. >> > > >> > > You can play with the range...but here is one thing to keep in mind. >> > > If you use a value greater than the number of members it will return >> >> > > the value as Range=0-*. For instance, if I have a group with 1025 >> > > members here are the attributes I will get back: >> > > 'member' returns 'member;Range=0-999' >> > > 'member;Range=0-500' returns 'member;Range=0-500' >> > > 'member;Range=0-1500' returns 'member;Range=0-*' (1500 is greater >> > > than >> > >> > > the 1025 members) 'member;Range=0-*' returns 'member;Range=0-*' >> > > >> > > Keep in mind you can use the dump method to output a quick "raw" >> > > view of everything in the entry object. >> > > >> > > Don >> > > >> > > -----Original Message----- >> > > From: Graham Barr [mailto:[EMAIL PROTECTED] >> > > Sent: Monday, December 11, 2006 4:51 PM >> > > To: [EMAIL PROTECTED] >> > > Cc: Perl-LDAP Mailing List >> > > Subject: Fwd: Net::LDAP search >> > > >> > > Begin forwarded message: >> > > > From: "Megan Kielman" <[EMAIL PROTECTED]> >> > > > Date: December 11, 2006 5:41:02 PM CST >> > > > Subject: Net::LDAP search >> > > > Message-Id: >> > > > <[EMAIL PROTECTED]> >> > > > >> > > > Graham, >> > > > >> > > > I hope it is ok that I am emailing you. Anyway, I am searching for >> >> > > > groups in AD and writing the contents of the "member" attribute to >> >> > > > a >> > >> > > > file. I have found there are cases when some groups are not >> > > > returning the members, but when I look in AD, the group does in >> > > > fact >> > >> > > > have members. >> > > > >> > > > One thing that is common amongst these groups is that when viewing >> >> > > > them via ADUC, the members all have gray hair which according to >> > > > MS means that the group contains more then 500 members. >> > > > >> > > > here is a sample of my code: >> > > > >> > > > my $ldap = Net::LDAPS->new($addr) or die "$@"; my $login = >> > > > $ldap->bind($user, password=> $pass); my @srcargs1 = ( >> > > > base => $path, >> > > > scope => "sub", >> > > > filter => >> "(sAMAccountName= >> > > > $group)", >> > > > attrs => ['member', >> 'name', >> > > > 'description', 'managedBy', 'createTimeStamp', 'modifyTimeStamp'], >> > > > control => [ $page ], >> > > > ); >> > > > $search = $ldap->search(@srcargs1); >> > > > foreach $entry ($search->entries) { >> > > > @members = >> > $entry->get_value("member"); >> > > > unless (scalar(@members)) { >> > > > &getempty($entry); >> > > > $count++; >> > > > }else{ >> > > > print "$group is not >> > empty\n"; >> > > > } >> > > > } >> > > > >> > > >> > > >> > > >> > >> > >> >> > >