【问题标题】:LDAP Search for User DN Returns a Hash - PerlLDAP 搜索用户 DN 返回一个哈希 - Perl
【发布时间】:2018-04-13 01:26:35
【问题描述】:

我要做的就是搜索用户并在 Perl 脚本中返回用户的 DN。但是,我的脚本打印的是对哈希的引用,而不是用户的实际 DN。

稍后需要将 DN 放入另一个变量中,因此我需要 DN 正确。

这是我的代码:

use strict;
use warnings;

use Net::LDAPS;
use Net::LDAP;
use Config::Simple;
use Try::Tiny;

#LDAP connection.
my $ldap;

my $hostname = "Hostname";
my $port = 2389;
my $rootDN = "username";
my $password = "password";

#Connect to LDAP
$ldap = Net::LDAP->new( $hostname, port => $port ) or die $@;

#Send username and password
my $mesg = $ldap->bind(dn => $rootDN, password => $password) or die $@;


my $result = $ldap->search(
  base   => "ou=AllProfiles",
  filter => "(cn=Alice Lee)",
  attrs => ['*','entrydn'],
);

my $href = $result;
print "$href\n";

这是我的输出:

有人知道我为什么会得到这个吗?或者知道如何解决?

谢谢!

【问题讨论】:

  • 添加use Data::Dumper,然后添加print Dumper $href;。在输出中,找到与您想要的字段关联的键,然后您可以执行print "$href->{field_name}\n";。本质上,您必须取消引用 hashref 并使用映射到您想要的数据的键来提取您想要的数据。
  • 为什么代码中有 Config::Simple 和 Try::Tiny?你没有使用它。
  • search 方法应该返回Net::LDAP::Search 的对象...
  • @simbabque 在这之前我有一种不同的方法,使用了一些以前编写的代码,只是忘了把它拿出来。
  • (@AlanWilson - 如果解决方案适合您,请接受它。SO 是“游戏化”的,每个人都感谢成功解决某人的问题所获得的声誉积分。)

标签: perl hash ldap dn


【解决方案1】:

你会得到一个完整的对象,你需要从中获取结果,然后导航到你想要的。如果确实“entrydn”是正确的名称,我相信这会起作用。

my $entries = $result->entries;
my $dn = $entries[0]->get_value('entrydn');

(如果您希望返回多个条目,当然您将不得不迭代。如果您可能没有得到任何结果,您也需要检查。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多