我想使用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
所以我的问题是:如果要删除属性,我必须如何准备更改对象?
答案 0 :(得分:1)
看来,原因是ldapjs/change.js内的错误。如果为非多值属性的删除操作提供了值,则LDAP服务器将拒绝执行。如果在更改对象中将值设置为null
或undefined
,则ldapjs将抛出错误,因为 toString()方法无法在 null <上使用/ em>或 undefined 。
我修复了那段代码,现在它可以工作了。请参阅ldapjs GitHub pull request 435。
现在可以将修改值设置为undefined
或null
。这导致没有任何属性值的请求。 LDAP服务器接受并执行此请求,该属性将被删除。
let change = { operation : 'delete', modification: { attributeName : undefined }};
client.modify(dn, change, (err, res) => { ... });
答案 1 :(得分:1)
传递空数组似乎有效。在修复错误之前,这是我的解决方法。
.+