Я использую функциональность сервера LDAP модуля Node.js ldapjs версия 1.0.2.Я хочу обработать расширенную операцию LDAP 1.3.6.1.4.1.4203.1.11.1 (см. RFC 3062 = Изменение пароля LDAP).
Мой сервер настроен ...
const server = ldapjs.createServer( ... );
...
server.exop('1.3.6.1.4.1.4203.1.11.1', (req: any, res: any, next: any) => {
const requestValue = req.requestValue;
});
Вызов команды ldappasswd
(из пакета debian ldap-utils) работает, метод обработчика вызывается правильно.
Данные из команды ldappasswd ... uid=user -A -S
со "старым" в качестве старого пароляи «новый» с новым паролем приводит к следующим шестнадцатеричным значениям:
30 14 80 08 75 69 64 3d 73 75 72 66 81 03 6f 6c 64 82 03 6e 65 77
0 u i d = u s e r o l d n e w
0x80 отмечает начало атрибута, 0x81 - начало старого пароля, 0x82 - начало нового пароля.Значение после этого байта - это длина, за которой следует сама информация.
Проблема:
Внутри метода обработчика requestValue - строка с недопустимыми символами-разделителями.
0uid=user�old�new
Преобразование строки в буфер (Buffer.from(req.reuqestValue
) приводит к:
<Buffer 30 14 ef bf bd 08 75 69 64 3d 75 73 65 72 ef bf bd 03 6f 6c 64 ef bf bd 03 6e 65 77>
Байты разделителя 0x80, 0x81 и 0x82 преобразуются в ef bf bd
, и поэтому анализ информации не выполняется, поскольку тип теряется.
Есть идеи, как получить информационные значения из атрибута requestValue
?