我正在尝试编写一些代码,允许用户通过 PHP 网络界面更改他们过期的 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
,结果却得到了 exitcode 247(这似乎不是真的)
然后我尝试改用 proc_open
,它提供了当前错误
ldapmodify: invalid format (line 5) entry: " ... "
据我所知,第 5 行的唯一内容是“-”。所以我对可能出了什么问题有点困惑。
附言我也看了这篇文章 LDIF file error?? Invalid Format?它报告了一个类似的问题,虽然假设“-”字符的编码是问题所在,但我不确定我能用 PHP 真正用它做什么(mb_string_encoding 整个字符串到 utf-8 似乎没有任何影响)
这也在 solaris 机器上运行,这也可能是一个因素。
*PHP 无法在单个命令中执行两个操作,这是在 AD 中更改用户密码所必需的。 (据我所知)
编辑:不知道为什么这会得到反对票,但我很高兴有人告诉我我是个白痴,如果我在做一些明显愚蠢的事情而不注意(只要你指出那是什么,就像我一样)已经坚持了一段时间)
最佳答案
多亏了 freenode 上的#ldap channel 的一些帮助,事实证明我确实是个白痴(特别是考虑到我一天中的大部分时间都在戳戳这个问题)。
当 LDIF 在“-”之后包含 Windows 换行符时,ldapmodify 似乎不喜欢它在 sublime 中将行尾从 Windows 切换到 unix 已经解决了我的问题*。
关于php - ldap修改: invalid format (line 5) entry: "... " on LDIF (passed from PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18987591/