繁体   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