【问题标题】:php ldap search: no such objectphp ldap 搜索:没有这样的对象
【发布时间】:2013-02-27 09:52:49
【问题描述】:

我是 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);

【问题讨论】:

  • 您希望找到的用户的 DN 是什么?
  • 抱歉,DN 是什么?最后我需要从 energia.sise/nej/users 获取所有用户
  • DN = 专有名称,用户的“路径”,请参阅Wikipedia
  • energia/nej/users

标签: php active-directory ldap


【解决方案1】:

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

  1. 您使用的用户名格式不正确。尝试使用 login@energia.siseENERGIA\login 进行绑定。
  2. 容器“OU=users, OU=nej, DC=energia, DC=sise” 不存在。尝试在整个域中搜索 - “DC=energia, DC=sise”,看看是否有任何结果。
  3. 尽可能在 Active Directory 中使用 ldap v3 协议。这应该在绑定之前设置:

    <strong>ldap_set_option( $ds, LDAP_OPT_PROTOCOL_VERSION, 3 );</strong>

  4. 我建议您也关闭 ldap v3 的引用处理,因为它有时会导致 AD 出现一些奇怪的行为:

    <strong>ldap_set_option( $ds, LDAP_OPT_REFERRALS, 0 );</strong>

在执行这样的搜索操作时,“No such object” 错误通常是指基本 DN 不存在。如果没有用户匹配您的过滤器,服务器将返回一个空结果集。

希望对您有所帮助!

【讨论】:

    【解决方案2】:

    指定的基础对象"OU=users, OU=nej, DC=energia, DC=sise" 不存在。基础对象是搜索开始的点 - 搜索结果中只会返回基础对象或其下方的条目,除非是 one-level 搜索,在这种情况下不返回基础对象。

    在编写代码之前,使用ldapsearch等已知的好工具来确定所需的请求参数是否正确:

    ldapsearch -h energia.sise -p port-number \
         -D login@energia -w password \
         -b ou=users,ou=nej,dc=energia,dc=sise -s sub \
         '(&)' 1.1
    

    如果上面显示基础对象不存在的错误,则找到正确的基础对象并重试。

    附带说明,与基础对象不存在的问题无关,过滤器组件cn=* 不是必需的,并且会导致搜索时间增加,因为cn=* 是一个存在 过滤器,这意味着包含cn 属性的条目将匹配搜索条件。除非我弄错了,User objectClass 需要 cn 属性,因此使用带有 objectClass=Usercn=*&amp; 过滤器只会导致服务器在搜索上花费更多时间。

    另见

    【讨论】:

      【解决方案3】:

      更新

      更新: 使用 LDAP 浏览器免费版(查看here)很好,因为您可以简单地浏览 LDAP 服务器,它可以帮助您了解是否可以绑定匿名等. 不过最大的好处是得到了DN(复制粘贴)。之后,我能够读取数据。

      我遇到了以下问题,我就是这样解决的:

      问题 1

      • 问题 1:即使我可以通过 LDAP 浏览器软件匿名连接,也无法绑定

      • 解决方案:按照上面的建议在绑定之前添加以下行:

        ldap_set_option( $ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3 );
        ldap_set_option( $ldapconn, LDAP_OPT_REFERRALS, 0 );
        

        之后我就可以绑定了……

      问题 2

      • 问题 2: 无法搜索...

      • 解决方案: 打开 LDAP 浏览器。检查连接以确保您可以连接到 LDAP 服务器。浏览示例记录。右键单击并转到属性并复制 DN 并在代码中替换它,就是这样!


      原文如下:

      我似乎无法搜索,我正在使用 LDAP Browser 4.5 免费版来确保一切正常...

      这是我的代码:

      function ldap_anon_connect($ein){
      
          $ldaphost = "ldap://link_to_ldap.com";
      
          //create a connection to ldap server
          $ldapconn = ldap_connect($ldaphost) or die("Couldn't connect to " .$ldaphost);
              if ($ldapconn) {
      
                  ldap_set_option( $ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3 );
                  ldap_set_option( $ldapconn, LDAP_OPT_REFERRALS, 0 );
      
                  $ldapbind = ldap_bind($ldapconn);
                  if ($ldapbind) {
      
                      // if binds, look some stuff up
                      $info = ldap_annon_get_profile($ein, $ldapconn);
                      return $info;
                   } 
                   else{
                      echo "Invalid EIN. Please Try again";
                      die();
                   }
      
          }
      
      }
      
      function ldap_annon_get_profile($ein, $ldapconn){
      
              $filter = "(cn=".$ein.")";
      
          $justthese = array(
                                      "cn","sn","givenName","displayName","mail","EmployeeClass","ManagerEIN",
                                      "mobile","title","c","PersonalTitle"
                      );
      
                      $sr = ldap_search($ldapconn, "o=CO,ou=COplc,ou=people", $filter, $justthese);
                              $info = ldap_get_entries($ldapconn, $sr);
      
                              return $info;
      
          }
      

      我已经仔细检查了我的 DN="o=CO,ou=COplc,ou=people" 这是正确的字符串,因为我可以在 LDAP 浏览器中查找这些内容...

      有什么想法吗?

      【讨论】:

        猜你喜欢
        • 2011-08-22
        • 1970-01-01
        • 2020-07-21
        • 2013-01-25
        • 1970-01-01
        • 1970-01-01
        • 2014-09-06
        • 2015-08-16
        • 2010-10-13
        相关资源
        最近更新 更多