그래서 문서를 통해 또 다른 읽은 사람이 저에게 내 질문에 대답했습니다.
분명히, ldap_search (), ldap_list () 및 ldap_read ()의 유일한 차이점은 각각 스코프 (ldap_scope_subtree (sub), ldap_scope_onelevel (1) 및 ldap_scope_base (base)입니다. 따라서 다른 대신 LDAP_READ ()를 사용하면 rootdse를 얻을 수 있습니다.
문제
그래서 직접 프로젝트 다시 파업. LDAP 전문가는 아니지만 표준은 패키지에서 어떤 방법을 구현하든 DNS 인증서로부터 인증서를 받기 위해 모든 패키지가 필요하기 때문에 테스트 환경을 설정하려고합니다.
에 따르면 문서, "3.3.3 LDAP 쿼리"섹션에서 규정 된 이벤트 시퀀스 (관련성을 위해 트림) :
* Discover the Base DNs
Branches in LDAP must be defined by a “Base DN”. The list of Base DNs that are
provided by a LDAP directory are found by doing a LDAP Query with a NULL (i.e.
“”) Base DN, and ObjectClass=”DN”.
* Query across the Base DN for entries where "Mail" contains the endpoint address
LDAP_* 기능을 사용하여 PHP 에서이 프로세스를 구현하려고 노력하고 있지만 그 길은 작동하지 않는 것 같습니다. 분명히 NULL은 빈 문자열과 동일하지 않습니다 (후자는 LDAP_SEARCH를 호출하는 경우 "그러한 객체 없음"오류를 반환합니다. "DN"은 ObjectClass 속성에 유효한 값이 아닙니다.
TL; DR, 익명 원격 사용자가 내가 놓친 (?) 기본 DN을 검색하는 또 다른 방법이 있습니까?
업데이트 : 내 문제의 근본 원인을 반영하도록 제목을 다시 표시했습니다. LDAP_* API가 '기본'범위를 지정할 수없는 경우 PHP의 Rootdse를 읽습니다.
해결책
그래서 문서를 통해 또 다른 읽은 사람이 저에게 내 질문에 대답했습니다.
분명히, ldap_search (), ldap_list () 및 ldap_read ()의 유일한 차이점은 각각 스코프 (ldap_scope_subtree (sub), ldap_scope_onelevel (1) 및 ldap_scope_base (base)입니다. 따라서 다른 대신 LDAP_READ ()를 사용하면 rootdse를 얻을 수 있습니다.
다른 팁
에서 루트 DSE. "NamingContexts"를 참조하십시오.
Java :
LDAPConnection conn = new LDAPConnection(hostname,port);
SearchRequest req = new SearchRequest("",SearchScope.BASE,"(&)","+");
SearchResult result = conn.search(req);
// If the search succeeds, the result will comprise one entry,
// and that entry is the Root DSE:
dn:
subschemaSubentry: cn=schema
namingContexts: C=us
vendorName: UnboundID Corp.
vendorVersion: UnboundID Directory Server 4.1.0.6