我正在尝试在我的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
我仍然尝试过这些解决方案,但无济于事。这里出了什么问题?
提前致谢!
答案 0 :(得分:0)
file://
应仅用于更改单个属性类型的值或多个值。您应该使用ldap_modify在单个LDAP修改操作中更新多个属性类型。
由于ldap_mod_replace
采用的参数导致您认为允许使用此方法更改多个属性类型,因此手册可能有些令人困惑。事实并非如此。