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服务器将拒绝执行。 如果在更改对象中将该值设置为null
或undefined
,则ldapjs将抛出错误,因为toString()方法不能用于null或undefined 。
我已经修复了这段代码,现在它工作。 请参阅ldapjs GitHub拉取请求435 。
修改值现在可以设置为undefined
或null
。 这导致没有任何属性值的请求。 这个请求被LDAP服务器接受和执行,属性被删除。
let change = { operation : 'delete', modification: { attributeName : undefined }}; client.modify(dn, change, (err, res) => { ... });