如何解决Perl Net :: LDAP过滤器不起作用
| 我正在使用perl-ldap搜索和修改LDAP目录。 除了我尝试根据其\“ uniqueMember \”属性(其值为dn(例如,cn=exuser,ou=people,dc=example,dc=com
))搜索组外,其他所有操作都正常。
这似乎使筛选字符串基于组成员进行搜索
uniqueMember=cn=exuser,dc=com
但这不起作用。
“转义”字符串中的等号也不会,因此,在打印结果字符串时,看起来好像其等号转义了。而且Net :: LDAP :: Filter对象没有很好的文档,所以我不确定如何创建一个,只是传递我一直使用的过滤器字符串(它也\不起作用)。
有什么建议么?
我应该补充一点,我确定问题是搜索没有返回结果-结果Search对象的计数为0。
我无法显示确切的代码,但这是这样的(仅文字已更改):
my $filter = \"uniqueMember=cn=exuser,dc=com\";
my $result = $ldap->search( base => \'ou=groups,dc=com\',filter => $filter);
while(my $entry = $result->pop_entry)
{ ....
....
}
可以通过子例程完成与LDAP服务器的连接和绑定。我可以肯定组织单位的名称以及uniqueMember
值的格式。对于$filter
字符串,我尝试一次转义等号(\\=
)和两次(\\\\\\\\=
)。我试过使用Net::LDAP::Filter->new($filter)
-尽管我的理解是它需要一个类似于代码中的过滤字符串,所以这并不是很有帮助。
格式化此过滤器字符串的正确方法是什么?
解决方法
尝试以下调试语句以查看最终过滤器的外观
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,dc=com\";
my $filter = \"uniqueMember=*exuser*\";
另外,您的基准指向的是ou=groups
,而不是滤波器的ou=people
。这可能会引起问题,因为“组”中可能没有任何用户具有这些属性。
#my $result = $ldap->search( base => \'ou=groups,dc=com\',my $result = $ldap->search( base => \'ou=people,filter => $filter);
while(my $entry = $result->pop_entry)
{ ....
....
}
, 这可与命令行LDAP工具一起使用吗?似乎是LDAP查询而不是Net :: LDAP的问题。
我对LDAP语法不太满意,但我认为它会像
(&(group=uniqueMember)(cn=exuser)(ou=people)(dc=example)(dc=com))
您也可以尝试使用Net :: LDAP :: Filter设置过滤器,并查看其解析结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。