我正在尝试编写一些代码,允许用户通过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}
-
!
Run Code Online (Sandbox Code Playgroud)
当我将生成的代码直接粘贴到我的控制台时,代码似乎工作正常,但到目前为止,我没有运气从PHP运行它.
我最初尝试传递代码exec,只是为了得到exitcode 247(这似乎不是真的)
然后我尝试使用proc_open,它提供了当前错误
ldapmodify: invalid format (line 5) entry: " ... "
Run Code Online (Sandbox Code Playgroud)
到目前为止,我可以看到第5行的唯一内容是" - ".所以我有点担心可能出错的地方.
PS我也读过这篇文章LDIF文件错误?? 无效的格式?虽然假设" - "字符的编码是问题,但我不确定用PHP来实现它是什么(mb_string_encoding将整个字符串转换为utf-8似乎没有任何影响)
这也是在solaris机器上运行,这也可能是一个因素.
*PHP无法在单个命令中执行两个操作,这是在AD中进行用户密码更改所需的一些操作.(据我所知)
编辑:不确定为什么这会得到挫折,但我很高兴被告知我是一个白痴如果我做一些明显愚蠢而没有注意到(只要你指出那是什么,因为我一直现在坚持了一段时间)