簡體   English   中英

php ldap search:沒有這樣的對象

[英]php ldap search: no such object

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

除了不必要的過濾器組件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協議。 這應該在綁定之前設置:

    ldap_set_option( $ds, LDAP_OPT_PROTOCOL_VERSION, 3 );

  4. 我建議您也關閉ldap v3的引用處理,因為它有時會導致AD的一些奇怪行為:

    ldap_set_option( $ds, LDAP_OPT_REFERRALS, 0 );

當執行這樣的搜索操作時, “無此對象”錯誤通常指的是基本DN不存在的事實。 如果沒有用戶匹配您的過濾器,則服務器將返回空結果集。

希望有所幫助!

指定的基礎對象"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=*&過濾器objectClass=User導致服務器在搜索上花費更多時間。

也可以看看

更新:使用LDAP瀏覽器免費版(在此處查看 )很好,因為您只需瀏覽LDAP服務器,它可以幫助您了解您是否可以綁定匿名等。但最大的好處是獲得DN (副本)並粘貼)。 之后我能夠讀取數據。

我有以下問題,這就是我的解決方法:

問題1:即使我可以通過LDAP瀏覽器軟件匿名連接,也無法綁定

解決方案:在綁定之前添加以下行,如上所示:

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

在此之后,我能夠綁定...

問題2:無法搜索...

解決方案:打開LDAP瀏覽器。 檢查連接以確保您可以連接到LDAP服務器。 瀏覽示例記錄。 右鍵單擊並轉到屬性並復制DN並將其替換為代碼,就是這樣!

原帖如下所示:

我似乎無法搜索,我正在使用LDAP瀏覽器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瀏覽器中查找內容...

有任何想法嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM