2017-03-15 39 views
1

我想用PHP來重命名組,但我得到的錯誤命名voilationPHP LDAP想重新命名組,但流汗 - 命名voilation錯誤

以下是我的代碼,成功連接到LDAP服務器。 一切工作正常,只需要知道如何解決這個錯誤。

$ldap = ldap_connect("my_ldap_host"); 
if ($ldap) { 

    $bind_rdn = "my_bind_rdn"; 
    $bind_password = "my_bind_password"; 
    $is_binded = ldap_bind($ldap, $bind_rdn, $bind_password); 
    if($is_binded) { 

     $ldap_ou = "my_ou"; 
     $ldap_base_dn = "my_base_dn"; 

     $group_entry = array(); 
     $group_entry["cn"] = $group_new_name; 
     $group_dn = "cn=" . $group_old_name . ",ou=" . $ldap_ou . "," . $ldap_base_dn; 
     $is_modified = ldap_modify($ldap, $group_dn, $group_entry); 
     if($is_modified) { 
      echo "Success"; 
     } 
     else { 
      echo "Fail : " . ldap_err($ldap); 
      // here getting error Naming voilation 
     } 
    } 
    else { 
     echo "Binding failed"; 
    } 
} 
else { 
    echo "Fail to connect to LDAP server"; 
} 
+0

第一次我在php中看到'LDAP'代碼。想知道它實際上做了什麼 –

回答

2

這需要發生。您正嘗試修改cn作爲dn的拍子的條目的cn。所以你也需要修改cn

你需要這樣的東西執行:感謝您的輸入

ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); 
$is_modified = ldap_rename($ldap, $group_dn, $group_entry, NULL, TRUE); 
if($is_modified) { 
    echo "Success"; 
} 
else { 
    echo "Fail : " . ldap_err($ldap); 
    // here getting error Naming voilation 
} 
+0

謝謝你的回答,我做了一些修改使其工作,你有想法如何強制重命名組,如果它有子條目 – Javed

+1

你將不得不重新命名所有子條目!沒有別的辦法! – heiglandreas

+0

相關的「修改」是將'''$ group_entry''從一個數組改爲一個包含''''cn ='的字符串。 $ group_new_name''' - 一切似乎都一樣;)哦!第三個參數是**不是** DN但是是RDN。 ;) – heiglandreas

1

@heiglandreas。

它非常接近我想要做的。但是在這個代碼中需要修改以使其工作。

$is_modified = ldap_rename($ldap, $group_dn, $group_entry, NULL, TRUE); 

$is_modified = ldap_rename($ldap, $group_old_dn, $group_new_dn, $new_parent, TRUE); 

$ group_entry:必須字符串沒有陣列,所以我已經使用$ group_new_dn作爲字符串而不是$ group_entry

完整的工作代碼

$ldap = ldap_connect("my_ldap_host"); 
if ($ldap) { 

    $bind_rdn = "my_bind_rdn"; 
    $bind_password = "my_bind_password"; 
    $is_binded = ldap_bind($ldap, $bind_rdn, $bind_password); 
    if($is_binded) { 

     $ldap_ou = "my_ou"; 
     $ldap_base_dn = "my_base_dn"; 

     $group_old_dn = "cn=my_old_group_name" . ",ou=" . $ldap_ou . "," . $ldap_base_dn; 
     $group_new_dn = "cn=my_new_group_name"; 
     $new_parent = null; 
     $is_modified = ldap_rename($ldap, $group_old_dn, $group_new_dn, $new_parent, TRUE); 
     if($is_modified) { 
      echo "Success"; 
     } 
     else { 
      echo "Fail : " . ldap_err($ldap); 
     } 
    } 
    else { 
     echo "Binding failed"; 
    } 
} 
else { 
    echo "Fail to connect to LDAP server"; 
}