LdapJS服务器exop处理失败
我正在使用Node.js模块1.0.2版的LDAP服务器功能。我想处理LDAP 1.3.6.1.4.1.4203.1.11.1扩展操作(请参阅=LDAP密码修改) 我的服务器已配置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
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
获取原始请求数据字节