我正在尝试编写一些代码,允许用户通过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
,只是为了得到exitcode 247(看起来并不真实)
然后我尝试使用proc_open
代替,这提供了当前错误
ldapmodify: invalid format (line 5) entry: " ... "
据我所知,第5行的唯一内容是“ - ”。所以我对可能出现的问题感到有点困惑。
P.S。我还阅读了这篇报道类似问题的帖子LDIF file error?? Invalid Format?,虽然假设“ - ”字符的编码是问题,但我不确定用PHP做什么我可以用它做什么(mb_string_encoding整个字符串进入utf-8似乎没有任何影响)
这也是在solaris机器上运行,也可能是一个因素。
* PHP无法在单个命令中执行两个操作,这是在AD中进行用户密码更改所需的一些操作。 (据我所知)
编辑:不确定为什么这会得到挫折,但我很高兴被告知我是一个白痴,如果我做的事情显然是愚蠢而没有注意到(只要你指出那是什么,因为我现在已经坚持了一段时间了)
答案 0 :(得分:5)
感谢freenode上#ldap频道的一些帮助,结果证明我确实是个白痴(特别是考虑到我一直在戳戳并刺激这一天)。
似乎ldapmodify不喜欢它,当一个LDIF包含一个windows新行后面的字符“ - ”切换行结束从windows到unix的sublime已经解决了我的问题*。