【问题标题】:PHP LDAP trying to rename group but gettting - Naming voilation errorPHP LDAP试图重命名组但得到 - 命名冲突错误
【发布时间】:2017-08-05 17:40:32
【问题描述】:

我正在尝试使用 PHP 重命名组,但我收到错误 Naming 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";
}

【问题讨论】:

  • 我第一次在 php 中看到 LDAP 代码。想知道它实际上做了什么

标签: php ldap openldap


【解决方案1】:

这需要发生。您正在尝试修改具有cn 作为dn 的pat 的条目的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
}

【讨论】:

  • 感谢您的回答,我已经进行了一些修改以使其正常工作,您是否知道如果其中有子条目如何强制重命名组
  • 您还必须重命名所有子条目!没有别的办法!
  • 相关的“修改”是将$group_entry 从一个数组更改为一个包含'cn=' . $group_new_name 的字符串——其他一切看起来都一样;)哦!第三个参数是不是 DN,而是RDN。 ;)
【解决方案2】:

@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 :需要是 String 而不是 Array 所以我使用 $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";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 2012-10-29
    • 1970-01-01
    • 2020-04-23
    • 2018-03-30
    • 2019-06-04
    • 1970-01-01
    相关资源
    最近更新 更多