我想使用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 => { ... });
...导致InproperMatchingError
所以我的问题是:如果我想删除属性,我必须如何准备更改对象?
最佳答案
看来,原因是 ldapjs/change.js 内部的错误。如果为非多值属性上的删除操作指定了值,LDAP 服务器将拒绝执行。如果您在更改对象中将值设置为 null
或 undefined
,ldapjs 将抛出错误,因为无法使用 toString() 方法null 或未定义。
我已经修复了那段代码,现在它可以工作了。请参阅ldapjs GitHub pull request 435 .
现在可以将修改值设置为 undefined
或 null
。这会导致请求没有任何属性值。 LDAP 服务器接受并执行此请求,该属性被删除。
let change = { operation : 'delete', modification: { attributeName : undefined }};
client.modify(dn, change, (err, res) => { ... });
关于javascript - ldapjs,如何删除属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43759952/