【问题标题】:How to read the contents of a variable with Netldap如何使用 Netldap 读取变量的内容
【发布时间】:2020-05-16 11:37:50
【问题描述】:

我正在编写一个脚本,它接收用户名作为参数并在 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 不会接收此变量的内容,因此不会返回任何内容。

有人可以帮我解决吗?

【问题讨论】:

  • 我已经修复了代码的缩进。不客气,但请考虑下次自己做。仔细缩进是一个非常有用的工具,可以帮助人们理解你的代码。如果您要让大量陌生人阅读和理解您的代码,那么让他们尽可能轻松地做到这一点是有礼貌的。
  • 请注意,use 语句通常放在文件的顶部 - 当然在任何子例程之外。

标签: perl ldap netldap


【解决方案1】:

你的问题在这里:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2012-01-26
    • 1970-01-01
    • 2018-07-18
    • 2020-03-29
    • 2016-04-27
    • 2019-06-17
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多