ldapjs,如何删除属性

时间:2017-05-03 12:24:16

标签: javascript node.js ldapjs

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

通过shell和@Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "usuario_id", nullable = false) private UsuarioEntity usuario; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "centro_id", nullable = false) private CentroEntity centro; private boolean paciente; 使用以下ldif文件:

ldapmodify ... -f removeAttribute.ldif

在ldapjs文档之后,我必须使用操作dn: uid=user,dc=test changetype: modify delete: myAttribute 并将属性添加到修改(... 删除修改中引用的属性(和所有值) ...)

如果我尝试使用ldapjs,我会收到错误。

'delete'

...导致错误无法读取属性'toString'为null

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

...导致 InappropriateMatchingError

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

2 个答案:

答案 0 :(得分:1)

看来,原因是ldapjs/change.js内的错误。如果为非多值属性的删除操作提供了值,则LDAP服务器将拒绝执行。如果在更改对象中将值设置为nullundefined,则ldapjs将抛出错误,因为 toString()方法无法在 null <上使用/ em>或 undefined

我修复了那段代码,现在它可以工作了。请参阅ldapjs GitHub pull request 435

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

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

答案 1 :(得分:1)

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

.+