2008-10-28 3 views
5

회사 LDAP 서버에 대해 복잡한 쿼리를 실행하는 데 문제가 있습니다. (예상 값을 반환에로) 처음 두 필터 작업은 지난 복잡한 일하지 않는 동안Perl의 Net :: LDAP를 사용하여 복잡한 쿼리를 작성하는 방법은 무엇입니까?

use Data::Dumper; 
use Net::LDAP; 

die "Can't connect to LDAP-Server: [email protected]\n" 
    unless $ldap = Net::LDAP->new('xLDAPx'); 


foreach my $filter ('ou=Personal', 'ou=BAR', 'ou=Personal,ou=BAR', 'ou=Personal,ou=FOO,o=FOO,dc=foo,dc=com') 
{ 
    $mesg = $ldap->search(base => "o=FOO,dc=foo,dc=com", filter => $filter); 
    print Dumper($mesg), "\n\n"; 
} 

: 나는 다음과 같은 펄 스크립트를 사용하고 있습니다. 빈 배열을 반환합니다. 실제로 나를 괴롭히는 이유는 Softerra LDAP 브라우저와 같은 도구를 사용할 때 정확하게 동일한 쿼리 문자열이 작동한다는 것입니다.

저는 PHP의 ldap_search & co를 사용하여 동일한 쿼리를 시도했지만 아무런 소용이 없습니다.

누군가이 문제에 대해 의견을 개진 할 수 있습니까?

holli

편집을 읽기위한

감사 : 이 서버의 구조는 :

Server 
    ou=FOO 
     ou=... 
     ou=Personal 
      uid=something 

나는 UID를의 목록이 필요합니다.

+0

항상'use strict;','use warnings;'. –

답변

5

나는 더 이상 (&(ou=Personal)(ou=FOO)(o=FOO)(dc=foo)(dc=com))과 같기를 원한다고 생각합니다. 하지만 정확히 무엇을 원하는지 전혀 알 수 없으므로 필터를 만들 수 없습니다.

편집은 추가 : (|(ou=Personal)(ou=FOO))

+0

LDAP의 단일 개체가 이러한 필터와 일치하지 않습니다. 게다가, 당신은 닫는 멍청이가 없습니다. :-) – Tomalak

+0

아마 일치하지 않겠지 만, 그것은 단지 통사론적인 예일뿐입니다. 내가 말했듯이, 그는 정확히 무엇을 원하는지에 대한 질문에서 나에게 명확하지 않습니다. –

4

이유는 구문 적으로 올바른 필터 문자열이 아니라 DN의 일부를 제공하기 때문입니다. 이게 Ldap Browser에서 작동한다는 것을 상상할 수 없습니다.

처음 두 개는 올바른 필터 문자열입니다. 그것들은 "({attribute} = {value})"형식으로 단일 객체 속성을 필터링합니다. 첫 번째 ("ou = Personal")는 검색 기반 내에 "Personal"이라는 OU를 반환합니다.

당신이 무엇을 찾으려고하는지 더 자세하게 설명하면 나는 당신에게 필요한 필터 표현을 말해 줄 수 있습니다.

+0

이 서버 구조를 OP – holli

+0

에 추가했습니다. 죄송 합니다만 질문은 아직 명확하지 않습니다. 귀하의 맥락에서 "uid"는 무엇입니까? 그 자체의 객체 또는 다른 객체의 속성? – Tomalak

2

RFC 2254 을 준수하는 필터를 작성하고 어떻게되는지 :이 당신이 원하는 무엇을 추측하고있어. 복잡한 쿼리가 필요하지 않으므로 한 브랜치 아래의 모든 항목에 하나의 속성이 필요합니다. 검색 메소드에 대한 attrs 인수를보십시오.

관련 문제