我正在使用 Node.js 模块ldapjs版本 1.0.2 的 LDAP 服务器功能。我想处理 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)有效,处理程序方法以正确的方式调用。
使用“old”作为旧密码和“new”使用新密码的命令中的数据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
属性中获取信息值吗?