2010-12-08 6 views
5

이 코드는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"; 
} 

정규 표현식을 사용하여 CN 출력 :

Dumper 사용

그래서 더 많은 정보가 있는지 궁금하네요. 정규 표현식을 사용하는 대신 "CN"방식으로 이러한 CN을 추출 할 수 있습니까?

업데이트 :

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

관련 문제