首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Netldap读取变量的内容

如何使用Netldap读取变量的内容
EN

Stack Overflow用户
提问于 2020-05-16 19:37:50
回答 1查看 40关注 0票数 1

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

使用的代码如下所示:

代码语言:javascript
复制
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;

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

有没有人能给我一个解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-16 21:32:32

你的问题在这里:

代码语言:javascript
复制
$valueA= $ldap->search(
  base => 'dc=domain,dc=network',
  scope => 'sub',
  filter => '(sn=$local)', 
);

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

代码语言:javascript
复制
  filter => '(sn=$local)',

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

代码语言:javascript
复制
  filter => "(sn=$local)",
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61836133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档