我是LDAP新手,所以我将尝试正确解释
我有一个主机名"energia.sise"
我需要获取位于energia.sise/nej/users中的所有用户

你能告诉我该怎么做吗?

在这段代码中,我尝试根据我的电子邮件获取记录,但是它出错
警告:ldap_search():搜索:没有这样的对象

     $base_dn ="OU=users, OU=nej, DC=energia, DC=sise";
     $ds = ldap_connect("energia.sise") or die("Невозможно соединиться с $ldaphost");

     ldap_bind($ds, "login@energia", "password");

     $filter = '(&(objectClass=user)(CN=*)(mail=kosmos*))';

     $sr = ldap_search($ds, $base_dn, $filter);
     $info = ldap_get_entries($ds, $sr);

最佳答案

正如Terry Gardner所指出的那样,除了不必要的过滤器组件CN = *之外,您的过滤器似乎是正确的。因此,我怀疑您的代码还有其他可能的问题:

  • 您使用的用户名格式不正确。尝试使用 [email protected] ENERGIA\login 进行绑定(bind)。
  • 容器“OU = users,OU = nej,DC = ergya,DC = sise”不存在。尝试在整个域中进行搜索-“DC = energya,DC = sise”,看看是否有任何结果。
  • 尽可能在Active Directory中使用 ldap v3 协议(protocol)。应在绑定(bind)之前设置此设置:
    ldap_set_option( $ds, LDAP_OPT_PROTOCOL_VERSION, 3 );
  • 我建议您也关闭ldap v3的引荐处理,因为它有时会给AD带来一些奇怪的行为:
    ldap_set_option( $ds, LDAP_OPT_REFERRALS, 0 );

  • 当执行这样的搜索操作时,“无此类对象”错误通常是指基本DN不存在的事实。如果没有用户匹配您的过滤器,则服务器将返回一个空结果集。
    希望对您有所帮助!

    关于PHP ldap搜索: no such object,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15108969/

    10-10 22:27