是否可以使用Perl显示ldap文件夹结构?

时间:2016-09-28 07:06:39

标签: perl ldap directory-structure

我将从LDAP服务器检索用户信息。客户发送了以下3个数据:

  1. LDAP服务器IP
  2. 要验证的用户名
  3. 验证密码
  4. 这是我第一次使用LDAP,所以我研究了它。我看到我必须使用一些参数,如cn,dc,ou。客户不应该提供此信息吗?或者客户的信息就足够了,我可以通过显示文件夹结构的代码找到这些参数吗?

1 个答案:

答案 0 :(得分:0)

您想要查看的结构称为目录树,由LDAP“条目”(不是文件夹)构成。

如果您获得的凭据足够,您应该可以从目录中收集条目。为此,您需要一个客户端库,您可以使用Perl LDAP

使用该库可以执行以下操作:

use Net::LDAP;

# Init connection and bind to the directory. 
$ldap = Net::LDAP->new('ldaphost.example.com') or die "$@";
$mesg = $ldap->bind ($binddn, password => $password);

# Perform a search on the whole tree below (and including) the base object.
$mesg = $ldap->search(base => $basedn); 

# Handle error
$mesg->code && die $mesg->error;

# Display results
foreach $entry ($mesg->entries) { $entry->dump; }

$mesg = $ldap->unbind;

上面的代码只是将条目打印到stdout($ entry-> dump)。

  • $binddn是要进行身份验证的dn。如果您已经获得了一个不是dn的简单用户名,例如“用户名”而不是uid=username,dc=example,dc=com,那么这可能意味着您正在处理Active Directory。在这种情况下,您可以尝试使用与以下模式对应的binddn进行绑定:'username@example.com'
  • basedn是基础对象条目的dn,搜索是在下面(并包括)基础对象的整个树上执行的。您必须指定有效的基数dn。

您可以尝试猜测要使用哪个基本dn。域组件(dc)通常与FQDN匹配,但不保证它会产生有效的基数dn(例如'ldaphost.example.com'会给出'dc=example,dc=com')。但是,您可以在服务器中查询rootDSE信息并检索namingContexts(或defaultNamingContext,如果有的话),并使用其中一个作为基础dn:

$ldap->search(base => '', attrs => 'namingContexts');

也就是说,如果你真的想要显示目录树,最好使用像Apache Directory Studio这样的LDAP资源管理器。

请注意,LDAP不仅限于以严格的“树”结构存储信息,它只需要尊重目录信息树(DIT)的命名法。