2011-02-03 22 views
0

我执行此搜索,其中$_可以是针对组或用户的DN。如何测试搜索结果是否被发现?

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"; 
} 

这个问题,这是,如果$_是一组,然后sAMAccountName不存在,并且脚本失败。我甚至不知道这是否适用于一个用户=(

有谁知道如何仅打印sAMAccountName如果$_是一个人吗?

回答

2

遍历搜索对象的条目。如果属性不存在,这将是undef(当然),但不会导致失败的,因为我们并不试图取消引用从它的方法调用

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

非常感谢=) – 2011-02-03 14:29:12

0

因为你的过滤器是:

(objectClass=Person) 

然后,当$ _是一个组时,您将检索不到条目。

因此,而不是那个可怕的定义()调用,检查是否$m->entries()是空的。

实施例:

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"; 
} 
相关问题