ldap3库:修改具有多个值的属性

时间:2016-07-22 13:06:36

标签: python python-3.x ldap

尝试修改具有多个值的ldap属性,似乎无法弄清楚语法。

我正在使用ldap3库和python3。

documentation提供了一个修改条目的两个属性的示例 - 但每个属性只有一个值。

该示例中的字典是我遇到问题的位:

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

而不是&#39; givenname&#39;这将有一个值我想修改memberuid属性,显然会有很多名称作为条目。

所以我把所有的memberuids吐进一个列表,进行修改,然后尝试将我的新用户名/ memberuid列表提供给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)

我已尝试将新会员名单作为列表传递

'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')]

执行替换,但我得到一个 memberuid看起来像这样   'clark.kent, the.hulk, bat.man'

2 个答案:

答案 0 :(得分:1)

您需要确保传递要修改的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 )]})

答案 1 :(得分:1)

我相信MODIFY_REPLACE命令不会接受多个值,因为它不会理解哪些值会被新的值替换。相反,你应该先尝试做MODIFY_DELETE旧值,然后再尝试MODIFY_ADD新值。