如何使用 Netldap 读取变量的内容
How to read the contents of a variable with Netldap
我正在编写一个脚本,接收用户名作为参数并在 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 不会接收此变量的内容,因此不会 return任何东西。
有人能给我解决方案吗?
您的问题在这里:
$valueA= $ldap->search(
base => 'dc=domain,dc=network',
scope => 'sub',
filter => '(sn=$local)',
);
或者,更具体地说,在这里:
filter => '(sn=$local)',
Perl(与许多编程语言一样)不会扩展单引号字符串中的变量。因此,您发送的是文字字符串 (sn=$local)
。修复很简单 - 更改为使用双引号字符串。
filter => "(sn=$local)",
我正在编写一个脚本,接收用户名作为参数并在 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 不会接收此变量的内容,因此不会 return任何东西。
有人能给我解决方案吗?
您的问题在这里:
$valueA= $ldap->search(
base => 'dc=domain,dc=network',
scope => 'sub',
filter => '(sn=$local)',
);
或者,更具体地说,在这里:
filter => '(sn=$local)',
Perl(与许多编程语言一样)不会扩展单引号字符串中的变量。因此,您发送的是文字字符串 (sn=$local)
。修复很简单 - 更改为使用双引号字符串。
filter => "(sn=$local)",