簡體   English   中英

ldap3庫:使用多個值修改屬性

[英]ldap3 library: modify attribute with multiple values

試圖修改具有多個值的ldap屬性,似乎無法弄清楚語法。

我將ldap3庫與python3一起使用。

文檔提供了一個示例,該示例修改了條目的兩個屬性-但每個屬性只有一個值。

該示例中的字典是我遇到的麻煩:

c.modify('cn=user1,ou=users,o=company',
     {'givenName': [(MODIFY_REPLACE, [<what do I put here>])]})

我要修改memberuid屬性,而不是只有一個值的“ givenname”,它顯然會有許多名稱作為條目。

因此,我將所有成員都吐到一個列表中,進行修改,然后嘗試將新的用戶名/成員列表提供給MODIFY命令。 像這樣:

oldval = 'super.man'
newval = 'clark.kent'

existingmembers = ['super.man', 'the.hulk', 'bat.man']
newmemberlist = [newval if x==oldval else x for x in existingmembers]
# newmemberlist = ", ".join(str(x) for x in newmemberlist)

我嘗試將newmemberlist作為列表傳遞

'memberuid': [(MODIFY_REPLACE, ['clark.kent', 'the.hulk','bat.man'])] 

這給我TypeError: 'str' object cannot be interpreted as an integer

或一個長字符串的各種組合(注釋行),用空格,逗號,半冒號和我能想到的其他任何符號分隔

'memberuid': [(MODIFY_REPLACE, 'clark.kent, the.hulk, bat.man')]

進行替換,但是我得到一個像這個'clark.kent, the.hulk, bat.man'

您需要確保傳入您要修改的ldapobject的DN。

c.modify(FULL_DN_OF_OBJECT, {'memberuid': [(MODIFY_REPLACE, ['clark.kent', 'the.hulk','bat.man'])]})

然后,您應該只能傳遞newmemberlist而不是['clark.kent','the.hulk','bat.man']

c.modify(FULL_DN_OF_OBJECT, {'memberuid': [(MODIFY_REPLACE, newmemberlist )]})

我相信MODIFY_REPLACE命令將不接受多個值,因為它不理解哪些值將被新值替換。 相反,您應該嘗試先執行MODIFY_DELETE舊值,然后再嘗試MODIFY_ADD新值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM