ldapjs,如何删除属性

我想使用Node.js ldapjs client api #modify删除LDAP条目的属性。

通过shell和ldapmodify ... -f removeAttribute.ldif它的工作原理,使用下面的ldif文件:

 dn: uid=user,dc=test changetype: modify delete: myAttribute 

在ldapjs文档之后,我必须使用操作'delete'并添加要修改的属性(… 删除修改中引用的属性(以及所有值) …)。

如果我尝试使用ldapjs来做到这一点,我会得到错误。

 let dn = 'uid=user,dc=test'; let change = { operation : 'delete', modification: { myAttribute: null } ; client.modify(dn, change, err => { ... }); 

…导致错误无法读取null的属性'toString'

 let dn = 'uid=user,dc=test'; let change = { operation : 'delete', modification: { myAttribute: oldValue } }; client.modify(dn, change, err => { ... }); 

…导致不适当的匹配错误

所以我的问题:如果我要准备更改对象,如果我想删除一个属性?

看来,原因是ldapjs / change.js中的一个bug。 如果为非多值属性上的删除操作给定值,则LDAP服务器将拒绝执行。 如果在更改对象中将该值设置为nullundefined ,则ldapjs将抛出错误,因为toString()方法不能用于nullundefined

我已经修复了这段代码,现在它工作。 请参阅ldapjs GitHub拉取请求435 。

修改值现在可以设置为undefinednull 。 这导致没有任何属性值的请求。 这个请求被LDAP服务器接受和执行,属性被删除。

 let change = { operation : 'delete', modification: { attributeName : undefined }}; client.modify(dn, change, (err, res) => { ... });