我正在尝试编写一些代码,允许用户通过 PHP Web 界面更改其过期的 Active Directory 密码。由于 PHP 的 ldap 库 * 的限制,似乎唯一的方法是生成一个 ldif,然后将其直接传递给 ldapmodify。
我想出的代码(减去变量)是:
ldapmodify -H {$ad_server} -D '{$dn}' -w {$old} <<!
dn: {$dn}
changetype: modify
delete: unicodePwd
unicodePwd:: {$oldPassword}
-
add: unicodePwd
unicodePwd:: {$newPassword}
-
!
当我将生成的代码直接粘贴到我的控制台时,代码似乎可以正常工作,但到目前为止,我还没有从 PHP 运行它。
我最初尝试将代码传递给exec
,只是为了得到退出代码 247(这似乎不是真的)
然后我尝试proc_open
改用,它提供了当前错误
ldapmodify: invalid format (line 5) entry: " ... "
据我所知,第 5 行唯一的东西是“-”。所以我有点不知道可能出了什么问题。
PS我也读了这篇文章LDIF文件错误??无效的格式?它报告了一个类似的问题,虽然假设“-”字符的编码是问题,但我不确定我能用 PHP 真正用它做什么(mb_string_encoding 整个字符串到 utf-8 似乎没有任何影响)
这也在 Solaris 机器上运行,这也可能是一个因素。
*PHP 无法在单个命令中执行两个操作,这是在 AD 中更改用户密码所必需的。(据我所知)
编辑:不知道为什么这会被否决,但如果我在没有注意到的情况下做一些明显愚蠢的事情,我很乐意被告知我是个白痴(只要你指出那是什么,就像我一直在现在坚持了一段时间)