2010-12-08 18 views
5

私はCNの使用正規表現を出力し、このコードLDAPを使用してCNを抽出していますか?

#!/usr/bin/perl 

use warnings; 
use strict; 
use Net::LDAP; 
use Data::Dumper; 

my $dn="CN=..."; 
my $password="xxx"; 

my $ldap = Net::LDAP->new('example.com') or die "[email protected]"; 
my $mesg = $ldap->bind($dn, password=>$password); 
if ($mesg->code) { die "uuuu $mesg"; } 

$mesg = $ldap->search(base => "dc=test,dc=example,dc=com", filter => "(name=LIST)",); 

my $ref = $mesg->entry->get_value("member", asref => 1); 
print Dumper $ref; 

foreach my $string (@{$ref}) { 
    $string =~ /CN=(.+?),.*/; 
    print $1 . "\n"; 
} 

持っている:私がある場合は構造

$VAR1 = [ 
      'CN=aaaa,OU=test,DC=test,DC=example,DC=com', 
      'CN=bbbb,OU=test,DC=test,DC=example,DC=com', 
      'CN=cccc,OU=test,DC=test,DC=example,DC=com', 

は、だから私は疑問に思って見ることができるDumperを使用

aaaa 
bbbb 
cccc 
... 

を正規表現を使用するのではなく、これらのCNを抽出するための「LDAP」方法が増えていますか?

アップデート:Javsに基づいて

は、これが解決策である答えます。

my $ref = $mesg->entry->get_value("member", asref => 1); 

foreach my $string (@{$ref}) { 
    print ldap_explode_dn($string)->[0]{CN} . "\n"; 
} 

答えて

6

次のことが可能です。そして、このようなあなたの属性にそれを使用

use Net::LDAP::Util qw(ldap_explode_dn); 

を:あなたが実現しない

$VAR1 = [ 
     { 
     'CN' => 'aaaa' 
     }, 
     { 
     'OU' => 'test' 
     }, 
     { 
     'DC' => 'test' 
     }, 
     { 
     'DC' => 'example' 
     }, 
     { 
     'DC' => 'com' 
     } 
    ]; 
+0

私がそれを行うなら 'print Dumper $ cn;'、 '$ VAR1 = 'LIST';'を得る。 –

+0

@Sandra Schlichtingああ、申し訳ありません、今あなたが望むものを手に入れました。私の編集をチェックしてください。 – javs

+2

あなたのLDAPサーバが返すものについて一貫性があるなら、 '$ dn - > [0] {CN}'(ここで$ dnはldap_explode_dnの結果です)と同じように簡単です。ハッシュ – javs

0

ldap_explode_dn($mesg->entry->get_value('member')); 

はハッシュのこの配列を取得しますCNは通常、LDAPディレクティブの属性です?

戻されたすべてのオブジェクトの属性CNを照会するだけではどうですか。その後、解析は必要ありません。

+0

私はそれをする方法がわかりません=(例を挙げることができますか? –

+0

これを達成するためには、メンバーごとに新しいクエリを作成する必要がありますが、すでに得られたものを解析することができます。 – javs

+1

@javs私はグループメンバーを列挙しているという例は見逃していました。 – geoffc

関連する問題