无法使用ldap_mod_replace替换任何属性

时间:2016-05-23 23:45:29

标签: php ldap openldap

我正在尝试在我的OpenLDAP服务器上构建一个自助服务门户,以便用户可以更新他们的GECOS条目,电话号码等。他们不会根据要求更新他们的密码。

问题是我无法更新LDAP服务器中的任何属性。我使用带有效DN(现在是根管理DN)的PHP调用ldap_mod_replace来更新这些属性。我收到的错误是:

(53)服务器不愿意执行

绑定对服务器成功。使用相同的绑定DN,我可以更新任何我希望使用第三方工具(JXplorer)的属性。

以下是执行更新的确切代码片段,用于保护IP:

function saveAccountData($connection, $dn, $newAcctData, $isAdmin = false) {
    $permittedData = array();
    $resp = ldap_bind($connection, "cn=rootdn,dc=domain,dc=tld", "reallygoodpassword");
    if (!$resp) {
        die("Failed to bind to LDAP with authenticated credentials! $resp\n");
    }
    if ($isAdmin) {
        $permittedData = $newAcctData;
    }
    else {
        $permittedData["homedirectory"] = $newAcctData["homeDirectory"];
        $permittedData["gecos"] = $newAcctData["gecos"];
        $permittedData["loginshell"] = $newAcctData["loginShell"];
        $permittedData["telephonenumber"] = $newAcctData["telephoneNumber"];
    }
    return ldap_mod_replace($connection, $dn, $permittedData);
}

我在调用此函数后检查外部错误,这就是我带错误消息到达此处的方式。

我参考了这本手册: http://www.openldap.org/doc/admin24/appendix-common-errors.html

我已经回顾了几个主题,但这些似乎适用于Active Directory: ldap_mod_replace() [function.ldap-mod-replace]: Modify: Server is unwilling to perform

我仍然尝试过这些解决方案,但无济于事。这里出了什么问题?

提前致谢!

1 个答案:

答案 0 :(得分:0)

file://应仅用于更改单个属性类型的值或多个值。您应该使用ldap_modify在单个LDAP修改操作中更新多个属性类型。

由于ldap_mod_replace采用的参数导致您认为允许使用此方法更改多个属性类型,因此手册可能有些令人困惑。事实并非如此。