LdapJS服务器exop处理失败

LdapJS服务器exop处理失败,ldap,ldapjs,Ldap,Ldapjs,我正在使用Node.js模块1.0.2版的LDAP服务器功能。我想处理LDAP 1.3.6.1.4.1.4203.1.11.1扩展操作(请参阅=LDAP密码修改) 我的服务器已配置 const server=ldapjs.createServer(…); ... server.exop('1.3.6.1.4.1.4203.1.11.1',(请求:任意、回复:任意、下一个:任意)=>{ const requestValue=req.requestValue; }); 调用命令ldappasswd

我正在使用Node.js模块1.0.2版的LDAP服务器功能。我想处理LDAP 1.3.6.1.4.1.4203.1.11.1扩展操作(请参阅=LDAP密码修改)

我的服务器已配置

const server=ldapjs.createServer(…);
...
server.exop('1.3.6.1.4.1.4203.1.11.1',(请求:任意、回复:任意、下一个:任意)=>{
const requestValue=req.requestValue;
});
调用命令
ldappasswd
(来自debian软件包ldap utils)是可行的,以正确的方式调用handler方法

来自
ldappasswd的数据。。。uid=user-A-S
将“old”作为旧密码并将“new”作为新密码的命令会产生以下十六进制值:

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标记新密码的开头。该字节后的值是长度,后跟信息本身

问题:
在处理程序methode中,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
属性中提取信息值吗?

可以通过安装版本
next
并使用
req.requestValueBuffer
而不是
req.requestValue
来解决该问题:

npm安装--保存ldapjs@next
const server=ldapjs.createServer(…);
...
server.exop('1.3.6.1.4.1.4203.1.11.1',(请求:任意、回复:任意、下一个:任意)=>{
const requestValue=req.requestValueBuffer;
})

该问题是由文件第61行中当前ldapjs主分支()中的错误引起的:

this.requestName=ber.readString(0x80);
if(ber.peek()==0x81)
试一试{
this.requestValue=ber.readString(0x81);
}捕获(e){
this.requestValue=ber.readBuffer(0x81);
}
ldappasswd
数据的情况下,调用
readString()
函数(没有引发异常),此函数始终使用UTF-8解码将缓冲区转换为字符串。这是错误的。此代码段中的另一个错误是调用对象
ber
上不存在的
readBuffer(…)

在ldapjs存储库的下一个分支中,此错误由中的错误修复程序解决

错误修正第82行:

this.requestName=ber.readString(0x80)
if(ber.peek()==0x81){
this.requestValueBuffer=ber.readString(0x81,true)
this.requestValue=this.requestValueBuffer.toString('utf8')
}

处理程序方法现在可以使用
req.requestValueBuffer
获取原始请求数据字节。

可以通过安装版本
next
并使用
req.requestValueBuffer
而不是
req.requestValue
来解决此问题:

npm安装--保存ldapjs@next
const server=ldapjs.createServer(…);
...
server.exop('1.3.6.1.4.1.4203.1.11.1',(请求:任意、回复:任意、下一个:任意)=>{
const requestValue=req.requestValueBuffer;
})

该问题是由文件第61行中当前ldapjs主分支()中的错误引起的:

this.requestName=ber.readString(0x80);
if(ber.peek()==0x81)
试一试{
this.requestValue=ber.readString(0x81);
}捕获(e){
this.requestValue=ber.readBuffer(0x81);
}
ldappasswd
数据的情况下,调用
readString()
函数(没有引发异常),此函数始终使用UTF-8解码将缓冲区转换为字符串。这是错误的。此代码段中的另一个错误是调用对象
ber
上不存在的
readBuffer(…)

在ldapjs存储库的下一个分支中,此错误由中的错误修复程序解决

错误修正第82行:

this.requestName=ber.readString(0x80)
if(ber.peek()==0x81){
this.requestValueBuffer=ber.readString(0x81,true)
this.requestValue=this.requestValueBuffer.toString('utf8')
}
处理程序方法现在可以使用
req.requestValueBuffer
获取原始请求数据字节