从Net :: LDAP到“已过滤”列表的列表哈希的Perl哈希

时间:2012-05-29 10:19:39

标签: perl ldap

Perl的Net::LDAP模块提供了一个Net :: LDAP :: Search对象。它的as_struct方法返回下面的结构。

多个条目

$entry{dn=...} = 
ref {cn} = ref {name}
ref {l} = ref {city}
ref{mail} = ref {xxxxxx}

一个例子:

uid=pieterb,ou=People,dc=example,dc=org {key of first hash = dn in ldap}
uid=pieterb {key=uid}
cn=Pieter B. {key=cn}
uidNumber=1000 {key=uidNumber}
gidNumber=4000 {key=gidNumber}

uid=markc,ou=People,dc=example,dc=org {key of first hash = dn in ldap }
uid=markc {key=uid}
cn=Mark Cole {key=cn}
uidNumber=1001 {key=uidNumber}
gidNumber=4000 {key=gidNumber}

但是,界面使用UI::Dialog,它需要下面格式的列表(radiolist / checklist),数据来自LDAP服务器中的属性值

list => [ 
'Pieter B.', ['uid=pieterb,ou=People,dc=example,dc=org',0],
'Mark Cole', ['uid=markc,ou=People,dc=example,dc=org',0],
'cn_value(openldap)',['dn_value',0],
'givenname_value(activedirectory)',['dn_value',0]
]

1 个答案:

答案 0 :(得分:0)

很难猜到你想要什么,但我认为这是一个LDAP属性名称与其值的列表。

您应该查看Data::Dumper来检查并展示您正在处理的数据结构。

如果从搜索中获得的数据包含多个可分辨名称或属性的多个值,则不提及该怎么做,但此代码只采用第一个DN和第一个值在属性值列表中生成列表列表。

我毫不怀疑这不是您所需要的,如果您更好地指明您的要求,我们将能够进一步提供帮助。

my $data = $msg->as_struct;
my $entry = (values %$data)[0];

my @attributes = map {
  $_, [$entry->{$_}[0], 0]
} keys %$entry;

$dialog->checklist(list => \@attributes);