2017-05-03 114 views
1

我想使用Node.js ldapjs client api #modify來刪除LDAP條目的屬性。ldapjs,如何刪除屬性

通過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 => { ... }); 

...導致錯誤無法讀取空

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

的特性 '的toString' ......導致InappropriateMatchingError

所以我的問題:我怎麼也得準備更改對象,如果我想刪除一個屬性?

回答

1

看來,原因是ldapjs/change.js內的一個錯誤。如果爲非多值屬性上的刪除操作給定值,則LDAP服務器將拒絕執行。如果將該值設置爲在變更對象nullundefined,ldapjs將拋出一個錯誤,因爲的toString()方法不能未定義使用。

我已經修復了那段代碼,現在它能正常工作。請參閱ldapjs GitHub pull request 435

修改值現在可以設置爲undefinednull。這導致沒有任何屬性值的請求。該請求被LDAP服務器接受和執行,屬性被刪除。

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

傳遞一個空數組似乎工作。在錯誤修復之前,這是我的解決方法。

let change = { operation : 'delete', modification: { myAttribute: [] } };