ldapjs,如何删除属性
ldapjs, how to delete attribute
我想使用 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 => { ... });
... 导致错误 无法读取 属性 'toString' of null
let dn = 'uid=user,dc=test';
let change = { operation : 'delete', modification: { myAttribute: oldValue } };
client.modify(dn, change, err => { ... });
... 导致 InappropriateMatchingError
所以我的问题是:如果我想删除属性,我必须如何准备 change 对象?
看来,原因是ldapjs/change.js里面的一个bug。如果为非多值属性的删除操作指定了值,LDAP 服务器将拒绝执行。如果在change对象中设置值为null
或undefined
,ldapjs会报错,因为toString()方法不能在[=上使用23=]null 或 undefined.
我已经修复了那段代码,现在它可以工作了。见 ldapjs GitHub pull request 435.
修改值现在可以设置为undefined
或null
。这导致没有任何属性值的请求。此请求被 LDAP 服务器接受并执行,属性被删除。
let change = { operation : 'delete', modification: { attributeName : undefined }};
client.modify(dn, change, (err, res) => { ... });
传递空数组似乎可行。在错误修复之前,这就是我的解决方法。
let change = { operation : 'delete', modification: { myAttribute: [] } };
我想使用 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 => { ... });
... 导致错误 无法读取 属性 'toString' of null
let dn = 'uid=user,dc=test';
let change = { operation : 'delete', modification: { myAttribute: oldValue } };
client.modify(dn, change, err => { ... });
... 导致 InappropriateMatchingError
所以我的问题是:如果我想删除属性,我必须如何准备 change 对象?
看来,原因是ldapjs/change.js里面的一个bug。如果为非多值属性的删除操作指定了值,LDAP 服务器将拒绝执行。如果在change对象中设置值为null
或undefined
,ldapjs会报错,因为toString()方法不能在[=上使用23=]null 或 undefined.
我已经修复了那段代码,现在它可以工作了。见 ldapjs GitHub pull request 435.
修改值现在可以设置为undefined
或null
。这导致没有任何属性值的请求。此请求被 LDAP 服务器接受并执行,属性被删除。
let change = { operation : 'delete', modification: { attributeName : undefined }};
client.modify(dn, change, (err, res) => { ... });
传递空数组似乎可行。在错误修复之前,这就是我的解决方法。
let change = { operation : 'delete', modification: { myAttribute: [] } };