我想使用Node.js ldapjs客户端api #修改删除LDAP条目的属性。
它通过shell和ldapmodify ... -f removeAttribute.ldif工作,使用以下ldif文件:
dn: uid=user,dc=test
changetype: modify
delete: myAttribute在ldapjs文档之后,我必须使用'delete'操作并将属性添加到修改中(...Deletes,修改中引用的属性(和所有值))。
如果我试着用ldapjs来做这件事,我就会出错。
let dn = 'uid=user,dc=test';
let change = { operation : 'delete', modification: { myAttribute: null } ;
client.modify(dn, change, err => { ... });..。导致错误,无法读取属性'toString‘的null
let dn = 'uid=user,dc=test';
let change = { operation : 'delete', modification: { myAttribute: oldValue } };
client.modify(dn, change, err => { ... });..。导致InappropriateMatchingError
所以我的问题是:如果我想删除一个属性,我必须如何准备变更对象?
发布于 2017-05-03 15:18:01
原因似乎是ldapjs/change.js内部的一个bug。如果为非多值属性上的delete操作提供了一个值,则LDAP服务器将拒绝执行。如果在change对象中将值设置为null或undefined,则ldapjs将引发错误,因为toString()方法不能用于null或未定义。
我已经修复了这段代码,现在它起作用了。见ldapjs GitHub拉出请求435。
现在可以将修改值设置为undefined或null。这将导致没有任何属性值的请求。LDAP服务器接受并执行此请求,删除该属性。
let change = { operation : 'delete', modification: { attributeName : undefined }};
client.modify(dn, change, (err, res) => { ... });发布于 2018-02-08 08:23:09
传递空数组似乎有效。在错误被修复之前,这是我的解决办法。
let change = { operation : 'delete', modification: { myAttribute: [] } };https://stackoverflow.com/questions/43759952
复制相似问题