ldapmodify: неверный формат (строка 5) запись: в LDIF (передано из PHP)

Я пытаюсь написать немного кода, который позволит пользователям изменять свои просроченные пароли 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. (насколько мне известно)

Редактировать: не уверен, почему это получает отрицательные голоса, но я был бы счастлив, если бы мне сказали, что я идиот, если я делаю что-то явно глупое, не замечая (пока вы указываете, что это такое, как я застрял на этом некоторое время)


person Carl    schedule 24.09.2013    source источник
comment
Я подозревал, что строки заканчиваются, но, вероятно, не требует отрицательного голоса. Я застрял на этом же сегодня.   -  person Dustin Graham    schedule 10.03.2015


Ответы (1)


Благодаря некоторой помощи канала #ldap на freenode оказалось, что я действительно идиот (особенно если учесть, что я копался в этом большую часть дня).

Кажется, ldapmodify не нравится, когда LDIF содержит символы новой строки Windows после «-». Переключение окончаний строк с Windows на Unix в возвышенном устранило проблему для меня *.

person Carl    schedule 24.09.2013
comment
Подумайте о том, чтобы принять свой собственный ответ. Лично я не считаю это дурным тоном. - person Terry Gardner; 26.09.2013