CN is a property of any LDAP object.  In AD, so is objectCategory.  Thus, your 
filter would look like:

$filter = '(&(cn=my user)(objectCategory=person)(objectclass=user))';

The '&' turns the whole statement into an AND condition.  
(objectCategory=person)(objectclass=user) makes sure that only user accounts 
are returned.

It would help if you opened up a program like ldp.exe and were able to see the 
raw LDAP data contained in your AD.  This will probably help you find the 
correct properties to filter on.

AG


> -----Original Message-----
> From: John Parks, SEI Webmaster [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, November 09, 2005 9:34 AM
> To: perl-ldap@perl.org
> Subject: RE: Trying to Query against Active Directory
> 
> 
> Rick-
> 
> Thanks for the reply...
> 
> I tried both enclosing the filter in parentheses and using 
> port 3268. But it
> still came back with the same error:
> 
> Can't call method "get_value" on an undefined value at 
> test-get.pl line 35,
> <DATA> line 225.
> 
> I am new to using LDAP and AD, so I am not sure what you are 
> suggesting with
> using objectcategory=person or group?
> 
> Are you talking about using something like?
> my $filter = "(CN=john doe,OU=person)";
> 
> 
> --John
> 
> -----Original Message-----
> From: Rick Tatem [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, November 09, 2005 10:20 AM
> To: perl-ldap@perl.org
> Subject: RE: Trying to Query against Active Directory
> 
> Try enclosing your filter in parentheses (sp?).
> 
> "(cn=[text])"
> 
> Also, I usually suggest making "(objectcategory=person)" (or 
> group, when
> it's appropriate) a part of the filter.  In wide searches it 
> can help a good
> bit.
> 
> Also, in general for Active Directory, it's important to remember that
> queries bound to port 389 (i.e. "straight LDAP") only scope 
> to the local
> domain of the server. If you're in a multi-domain forest and you start
> searching for things outside of your local domain, the server 
> will return
> LDAP Referrals (which are up to the client to handle).  
> Whereas if you bind
> to the Global Catalog (port 3268, and the server must be 
> designated a GC...
> Most DCs are) you're searching a replicated subset of the 
> entire forest.
> The GC has most of the stuff you'd ever look for anyway (and 
> you can always
> add more).
> 
> Rick
> 
> ---
> Rick Tatem
> Messaging and Directory Resources
> SAS Institute Inc.
> 
> -----Original Message-----
> From: John Parks, SEI Webmaster [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, November 09, 2005 9:56 AM
> To: perl-ldap@perl.org
> Subject: Trying to Query against Active Directory
> 
> Greetings,
>  
> I am trying to use perl-ldap to search an Active Directory. I 
> am able to
> connect and bind, but when I attempt to search I am not 
> getting any usable
> results back. I am hoping someone can spot what I am doing 
> wrong and help me
> out a bit. I have removed some content from the script 
> replacing it with
> notes about what the content was surrounded by []. So the [] 
> are not really
> part of the script just place holds for the content. 
>  
> #!/usr/bin/perl
> print "Content-type: text/html\n\n";
> use strict;
> use Net::LDAP;
>  
> my $ad = Net::LDAP->new("[the address I am connecting to]:389") or die
> (print "connection failed\n");
>  
> $ad->bind("[EMAIL PROTECTED] ur]l", password =>'[the 
> password using single
> quotes due to the use of special characters]');
>  
> #Up to this point everything seems to be working based on my 
> error checking.
>  
> # Declare the necessary search variables
>  
> # What is the search base?
>  
> my $searchbase = 'OU=[This is the folder I am looking in. 
> It's three words
> separated by a space between each word],DC=[url part],DC=[url 
> part],DC=[url
> part]';
>  
> # What are we searching for?
>  
> my $filter = "CN=[name of one of our users that I know is in the AD]";
>  
> # Which attributes should be returned?
>  
> my $attrs = "sn, givenname, mail";
>  
> # Execute the search
>  
> my $results = 
> $ad->search(base=>$searchbase,filter=>$filter,attrs=>$attrs);
>  
> # Display entries
>  
> my $entry;
>  
> $entry = $results->entry(0);
>  
> print $entry->get_value('sn').", 
> ".$entry->get_value('givenname')."\n";
> print "Email: ".$entry->get_value('mail')."\n";
>  
>  
> # Unbind from the server
> $ad->unbind;
>  
> The error messages I am getting are: 
> Can't call method "get_value" on an undefined value at 
> test-get.pl line 38,
> <DATA> line 225.
>  
> To me, this sounds like the search results are not coming 
> back in a useful
> manor.
>  
> This is what the results look like:
> Net::LDAP::Search=HASH(0x8345f68)
>  
> Any suggestions would be greatly appreciated.
>  
> Thanks
> --John
>  
> 
> 

Reply via email to