5

我在对我们公司的 LDAP 服务器运行复杂查询时遇到问题。我正在使用以下 Perl 脚本:

use Data::Dumper;
use Net::LDAP;

die "Can't connect to LDAP-Server: $@\n" 
    unless $ldap = Net::LDAP->new( 'xLDAPx' );


foreach my $filter ( 'ou=Personal', 'ou=BAR', 'ou=Personal,ou=BAR', 'ou=Personal,ou=FOO,o=FOO,dc=foo,dc=com' )
{ 
    $mesg = $ldap->search( base => "o=FOO,dc=foo,dc=com", filter => $filter );
    print Dumper($mesg), "\n\n";
}

虽然前两个过滤器有效(如返回预期值),但最后一个复杂的过滤器无效。它返回一个空数组。真正让我感到困惑的是,当我将它与像 Softerra LDAP 浏览器这样的工具一起使用时,完全相同的查询字符串会起作用。

我也尝试过使用 PHP 的ldap_search& co 进行相同的查询,但无济于事。

有人可以对此有所了解吗?

谢谢阅读

霍利

编辑:这是服务器的结构:

Server
    ou=FOO
        ou=...
        ou=Personal
            uid=something

我需要一个 uid 列表。

4

3 回答 3

5

我想你希望它更像(&(ou=Personal)(ou=FOO)(o=FOO)(dc=foo)(dc=com)). 但是您根本不清楚您到底想要什么,所以我无法为您制作过滤器。

编辑添加:我猜这是你想要做的:(|(ou=Personal)(ou=FOO))

于 2008-10-28T10:23:17.977 回答
4

原因是您没有提供语法正确的过滤器字符串,而是 DN 的一部分。我无法想象这在 Ldap 浏览器中有效 - 我只是尝试了自己但没有成功。

前两个是正确的过滤器字符串。它们以“({attribute}={value})”的方式过滤单个对象属性。第一个 ("ou=Personal") 将在您的搜索库中返回任何名为“Personal”的 OU。

如果您更详细地解释您要查找的内容,我可能会告诉您您需要什么过滤器表达式。

于 2008-10-28T09:31:34.400 回答
2

编写一个符合RFC 2254的过滤器, 然后看看会发生什么。您不需要复杂的查询,您希望一个分支下的每个条目都有一个属性。查看搜索方法的 attrs 参数。

于 2008-10-28T11:23:15.563 回答