From: Chris R. <Chr...@me...> - 2000-06-29 18:07:15
|
On Thu, 29 Jun 2000 18:22:00 BST, Graham Barr wrote: > ----- Forwarded message from "Piggott, Christopher" <ch...@ad...> ----- > > From: "Piggott, Christopher" <ch...@ad...> > To: "'gb...@po...'" <gb...@po...> > Subject: Net::LDAP question > Date: Thu, 29 Jun 2000 13:12:45 -0400 > X-Mailer: Internet Mail Service (5.5.2650.21) > > Hi Graham, > > Sorry to bother you. Using Net::LDAP can you retrieve an entire ldap > server's contents? I have tried: > my $filter = ""; > my $filter = "(cn=*)"; > etc. but am coming up empty. My basic structure is: > > $mesg = $ldap->search(base => "c=*", filter = $filter); > > I know for sure that the ldap connection is good, because if I search where > $filter = "(cn=*Piggott*") it returns my own record. The server is > Microsoft Exchange Server. You almost certainly won't be able to get all the entries from a directory using a single operation. Servers have controls to prevent you from doing that, called the sizelimit and the timelimit. The normal approach is therefore: start at the top entry you want; read it; get the names of all the immediate subordinate entries; read them, and then repeat (recurse or iterate) through all the subordinate entries, doing the same thing etc etc. This way you have multiple searches, and the sizelimits etc only apply to individual searches, ie layers of the directory. There's a particular problem with your search however: $mesg = $ldap->search(base => "c=*", filter = $filter); That is saying start from an entry called c=* and perform some kind of search. I'm betting you don't have an entry called c=*, which is why your search is failing (it should fail with a name error.) You cannot specify a search base using wildcards or expressions - the search base must be the DN of an actual entry. Your search base might be c=US, for instance. Your search will also only locate the entries with 'cn' attributes. Not all entries have 'cn' attributes, so you might want to search for something that all entries do have. A filter of '(objectclass=*)' is the normal way to do this. Cheers, Chris |