Perl Net :: LDAP过滤器不起作用
我正在使用perl-ldap来搜索和修改LDAP目录。Perl Net :: LDAP过滤器不起作用
除了当我尝试基于其“uniqueMember”属性(其值为dn(例如,cn=exuser,ou=people,dc=example,dc=com
))搜索组时,一切正常。
这似乎使过滤字符串基于组成员
uniqueMember=cn=exuser,ou=people,dc=example,dc=com
但是,这并不工作,在搜索。
也不会“转义”字符串中的等号,以便在打印时生成的字符串看起来像具有等号。而Net :: LDAP :: Filter对象没有很好的文档,所以我不知道如何创建一个除了传递我一直使用的过滤器字符串(这也不起作用) 。
有什么建议吗?
我应该补充一点,我确定问题是搜索没有返回结果 - 最终的搜索对象有0个计数。
我不能显示确切的代码,但它是这样的(仅文字已经改变):
my $filter = "uniqueMember=cn=exuser,ou=people,dc=example,dc=com";
my $result = $ldap->search(base => 'ou=groups,dc=example,dc=com',
filter => $filter);
while(my $entry = $result->pop_entry)
{ ....
....
}
连接并绑定到LDAP服务器已在一个子程序,其中工程完成。我确信组织单位的名称以及uniqueMember
值的格式。对于$filter
字符串,我尝试了一次转义等号(\=
)和两次(\\\\=
)。我试过使用Net::LDAP::Filter->new($filter)
- 虽然我的理解是它需要一个像代码中的过滤器字符串,所以这不是很有帮助。
什么是格式化此过滤器字符串的正确方法?
这是否与命令行LDAP工具一起工作?它似乎是LDAP查询的问题,而不是Net :: LDAP。
我不是很擅长用LDAP语法,但我想那会像
(&(group=uniqueMember)(cn=exuser)(ou=people)(dc=example)(dc=com))
您也可以尝试建立与网:: LDAP ::过滤器及滤芯看看它解析它。
请尝试以下调试语句看到最终过滤器是什么样子
my $filter_str = "uniqueMember=cn=exuser,ou=people,dc=example,dc=com";
my $filter = Net::LDAP::Filter->new($filter_str);
print $filter->as_string();
另外,尝试使用通配符,像这样:
#my $filter = "uniqueMember=cn=exuser,ou=people,dc=example,dc=com";
my $filter = "uniqueMember=*exuser*";
而且,你的基础在ou=groups
而不是指向ou=people
喜欢你的过滤器。这可能导致问题,因为可能没有任何用户在“组”中拥有这些属性。
#my $result = $ldap->search(base => 'ou=groups,dc=example,dc=com',
my $result = $ldap->search(base => 'ou=people,dc=example,dc=com',
filter => $filter);
while(my $entry = $result->pop_entry)
{ ....
....
}
显示你的Perl代码,用英文描述是不够的。 - 我总是使用[gq浏览器](http://sf.net/projects/gqclient/)来帮助LDAP调试。 – daxim 2011-06-14 14:41:29
您是否尝试过使用不同的版本。如果服务器与2.x兼容,则此查询可能会有效。 'version => N 设置正在使用的协议版本(默认为LDAPv3)。如果您想要与旧服务器通信并因此必须使用LDAPv2.',这非常有用 – ZnArK 2012-07-06 14:08:32