尝试修改具有多个值的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'
答案 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新值。