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]
]
答案 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);