Я пытаюсь написать немного кода, который позволит пользователям изменять свои просроченные пароли Active Directory через веб-интерфейс PHP. Из-за ограничений библиотеки 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 - это "-". Так что я немного застрял в том, что может быть не так.
P.S. Я также прочитал этот пост ошибка файла LDIF?? Invalid Format?, который сообщил об аналогичной проблеме, хотя, предполагая, что проблема связана с кодировкой символа «-», я не уверен, что я действительно могу с ним сделать с помощью PHP (mb_string_encoding вся строка в utf- 8 никак не влияет)
Это также работает на машине Solaris, что также может быть фактором.
* PHP не может выполнить два действия в рамках одной команды, что требуется для изменения пароля пользователя в AD. (насколько мне известно)
Редактировать: не уверен, почему это получает отрицательные голоса, но я был бы счастлив, если бы мне сказали, что я идиот, если я делаю что-то явно глупое, не замечая (пока вы указываете, что это такое, как я застрял на этом некоторое время)