1

我正在编写一个脚本,它接收用户名作为参数并在 LDAP 中执行搜索,但我找不到在 LDAP 搜索过滤器中使用 Perl 变量的方法。

使用的代码是这个:

package cnmodule;

sub function1 {

  use strict;
  use Net::LDAP;

  my ($local) = @_;
  my $valueA;

  my $ldap = Net::LDAP->new('ad.network',version => 3) 
    or die "Can t connect to LDAP ($@)";

  $valueA = $ldap->bind ("cn=usercheck,cn=users,dc=domain,dc=network", password => 'password'); 
  $valueA->code && die $valueA->error;

  $valueA= $ldap->search(
    base => 'dc=domain,dc=network',
    scope => 'sub',
    filter => '(sn=$local)', 
  );

  $ldap->unbind();

  $valueA->code && die $valueA->error;
  foreach my $entry ($valueA->all_entries) {
    my $valueB = $entry->get_value('CN'); 
  }
  return $valueB;
}

$variableA='test';
$variableB=function1($variableA);
print $variableB;
1;

变量“$local”包含我需要进行搜索的名称,并在 ldap 过滤器中使用,但使用此脚本 LDAP 不会接收此变量的内容,因此不会返回任何内容。

有人对我有解决方案吗?

4

1 回答 1

2

你的问题在这里:

$valueA= $ldap->search(
  base => 'dc=domain,dc=network',
  scope => 'sub',
  filter => '(sn=$local)', 
);

或者,更具体地说,在这里:

  filter => '(sn=$local)',

Perl(像许多编程语言一样)不会在单引号字符串中扩展变量。因此,您要发送文字 string (sn=$local)。修复很简单 - 更改为使用双引号字符串。

  filter => "(sn=$local)",
于 2020-05-16T13:32:31.940 回答