在 Perl 中使用文件作为过滤器 Net::LDAP
use file for filter in Perl Net::LDAP
当我在命令行上手动执行 LDAPsearch 时,我可以这样做,以便过滤器属性可以像这样从文件中删除:
ldapsearch -v -h <host> -D "<DN>" -b "OU=myou,DC=mydc" -f myqueries.txt "(cn=%s)"
myqueries.txt 包含如下条目:
name1
name2
nameN
现在我正尝试使用 Net::LDAP 在 Perl 中做同样的事情,但我在文档中找不到类似的选项。
你知道它能不能做到吗?
在最坏的情况下,我知道我可能可以创建一个记录数组(包含查询)并在这些名称上使用许多 ldapsearches 进行循环,它会起作用,但我更愿意使用net::ldap 属性(如果可能的话)(更少的代码)
例如
$data = $ldap->search(
base => $dn,
scope => 'one',
pagesize => '999',
filter => '(cn=%s)',
file => 'myqueries.txt', # this option does not exist
attrs => [ qw( displayName cn ) ]
);
谢谢!
Perl Net::LDAP 中似乎没有实现 ldapsearch -f
选项,但您仍然可以执行完全等效的操作:对从输入文件读取的每一行执行搜索操作:
open $handle, '<', $filepath;
chomp(@lines = <$handle>);
close $handle;
foreach $cn (@lines) {
$data = $ldap->search(
base => $dn,
scope => 'one',
pagesize => '999',
filter => "(cn=$cn)",
attrs => [ qw( displayName cn ) ]
);
...
}
您还可以通过在 OR 过滤器中连接属性值来避免 foreach 循环并在单个查询中仍然获得相同的结果:
$filter = '(|(cn=' . join(')(cn=', @lines) . '))';
当我在命令行上手动执行 LDAPsearch 时,我可以这样做,以便过滤器属性可以像这样从文件中删除:
ldapsearch -v -h <host> -D "<DN>" -b "OU=myou,DC=mydc" -f myqueries.txt "(cn=%s)"
myqueries.txt 包含如下条目:
name1
name2
nameN
现在我正尝试使用 Net::LDAP 在 Perl 中做同样的事情,但我在文档中找不到类似的选项。 你知道它能不能做到吗?
在最坏的情况下,我知道我可能可以创建一个记录数组(包含查询)并在这些名称上使用许多 ldapsearches 进行循环,它会起作用,但我更愿意使用net::ldap 属性(如果可能的话)(更少的代码)
例如
$data = $ldap->search(
base => $dn,
scope => 'one',
pagesize => '999',
filter => '(cn=%s)',
file => 'myqueries.txt', # this option does not exist
attrs => [ qw( displayName cn ) ]
);
谢谢!
Perl Net::LDAP 中似乎没有实现 ldapsearch -f
选项,但您仍然可以执行完全等效的操作:对从输入文件读取的每一行执行搜索操作:
open $handle, '<', $filepath;
chomp(@lines = <$handle>);
close $handle;
foreach $cn (@lines) {
$data = $ldap->search(
base => $dn,
scope => 'one',
pagesize => '999',
filter => "(cn=$cn)",
attrs => [ qw( displayName cn ) ]
);
...
}
您还可以通过在 OR 过滤器中连接属性值来避免 foreach 循环并在单个查询中仍然获得相同的结果:
$filter = '(|(cn=' . join(')(cn=', @lines) . '))';