2012-05-29 43 views
0

Perl的Net::LDAP模块提供了Net :: LDAP :: Search对象。它的as_struct方法返回下面的结构。从Net :: LDAP到“已过滤”列表的哈希值的Perl哈希

多个条目作为

$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其中预计在下面的格式(单选列表/清单)的列表,以从属性数据来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

你的问题很不清楚。我知道'Net :: LDAP'的作用,但不能将你描述的内容与'Net :: LDAP :: as_struct'的结果联系起来。 'ref {xx}'项目意味着什么? '属性(ex'xx')值'项的含义是什么? 'ex'是指* example *?你使用了哪种方法的'UI :: Dialog'(也许是''checklist')?你想要的列表结构包含的字符串不会出现在你的LDAP数据中的任何地方,所以我不能告诉你如何将一个字符串转换为另一个字符串。 – Borodin

回答

0

这是很哈哈rd猜测你想要什么,但我认为它是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); 
+0

我会尝试使用您的提示,看起来我无法编辑我原来的帖子,因为代码格式问题... – PieterB