2

我正在尝试编写一些代码,允许用户通过 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 中更改用户密码所必需的。(据我所知)

编辑:不知道为什么这会被否决,但如果我在没有注意到的情况下做一些明显愚蠢的事情,我很乐意被告知我是个白痴(只要你指出那是什么,就像我一直在现在坚持了一段时间)

4

1 回答 1

5

感谢 freenode 上#ldap 频道的一些帮助,事实证明我确实是个白痴(特别是考虑到我一天中的大部分时间都在戳这个东西)。

当 LDIF 在“-”之后包含 windows 换行符时,ldapmodify 似乎不喜欢它在 sublime 中将行结尾从 windows 切换到 unix 已经解决了我的问题*。

于 2013-09-24T17:14:59.330 回答