0

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]
]
4

1 回答 1

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);
于 2012-05-29T12:46:39.183 回答