PHP LDAP想重新命名组,但流汗 - 命名voilation错误

问题描述:

我想用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'代码。想知道它实际上做了什么 –

这需要发生。您正尝试修改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

@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"; 
}