2017-05-03 121 views
1

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

通过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 => { ... }); 

...导致错误无法读取空

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

的特性 '的toString' ......导致InappropriateMatchingError

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

回答

1

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

我已经修复了那段代码,现在它能正常工作。请参阅ldapjs GitHub pull request 435

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

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

传递一个空数组似乎工作。在错误修复之前,这是我的解决方法。

let change = { operation : 'delete', modification: { myAttribute: [] } };