开发者

How to test if search result was found?

I perform this search, where $_ can be a DN for for group or an user.

my $m = $ldap->search(
  base => "$_", 
  scope => 'base',
  filter => '(objectClass=Person)',
  attrs => ['sAMAccountName'], 
  );

if (defined($m->entry->entries->get_value('sAMAccountName'))) {
  print $m->entry->entries->get_value('sAMAccountName') . "\n";
}

This problem this is, if $_ is a group, then sAMAccountName doesn't exist, and the script fails. I am 开发者_如何学JAVAnot even sure if this works for an user =(

Does anyone know how to only print the sAMAccountName if $_ is a person?


Iterate over the search object's entries. If the attribute does not exist, it will be undef (of course), but not cause a failure because we do not attempt to dereference a method call from it.

foreach my $entry ($m->entries) {
    my ($uid, $sAMAccountName) = (
        $entry->get_value('uid'),
        $entry->get_value('sAMAccountName'),
    );
}


Because your filter is:

(objectClass=Person)

Then you will retrieve no entries when $_ is a group.

So instead of that horrible defined() call, check to see if $m->entries() is empty.

Example:

my $m = $ldap->search(
  base => "$_", 
  scope => 'base',
  filter => '(objectClass=Person)',
  attrs => ['sAMAccountName'], 
  );

my @entries = $m->entries();

if (@entries) {
  print $m->entry->entries->get_value('sAMAccountName') . "\n";
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜