The error probably indicates that it's finding an entry that does NOT have a
value for one (or more) of the attributes you're wanting returned. Try just
dumping the entry(ies).
Instead of:
print $entry->get_value('sn').", ".$entry->get_value('givenname')."\n";
print "Email: ".$entry->get_value('mail')."\n";
Try
$entry->dump();
That should show you something useful. I ran a simple script (similar to
yours) that produced the same error. It was returning an additional account (an
admin-type account) that doesn't have an email address (so
$entry->ge_value('mail') didn't like it). If an attribute doesn't have a
value, then the attribute doesn't exist for that object (it's not just = "")
Rick
---
Rick Tatem
Messaging and Directory Resources
-----Original Message-----
From: John Parks, SEI Webmaster [mailto:[EMAIL PROTECTED]
Sent: Wednesday, November 09, 2005 10:34 AM
To: [email protected]
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: [email protected]
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: [email protected]
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