2

我想使用Node.js ldapjs 客户端 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 => { ... });

... 导致InappropriateMatchingError

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

4

2 回答 2

2

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

let change = { operation : 'delete', modification: { myAttribute: [] } };
于 2018-02-08T08:23:09.547 回答
2

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

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

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

let change = { operation : 'delete', modification: { attributeName : undefined }};
client.modify(dn, change, (err, res) => { ... });
于 2017-05-03T15:18:01.680 回答