0

当我在命令行上手动执行 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 ) ]
  );

谢谢 !

4

1 回答 1

0

似乎ldapsearch -fPerl Net::LDAP 中没有实现该选项,但您仍然可以执行完全相同的操作:对从输入文件读取的每一行执行搜索操作:

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) . '))';
于 2019-09-26T12:32:10.890 回答