使用LDIF和Python删除LDAP中的属性

时间:2017-03-15 23:52:57

标签: python python-2.7 ldap ldif

我想做(我想的)会是一件非常简单的事情。我有一个看起来像这样的LDAP条目(LDIF格式):

dn: cn=myorg,ou=teams,ou=groups,o=company,c=us
cn: myorg
objectClass: top
objectClass: CompanyTeams
objectClass: groupOfUniqueNames
owner: cn=john,ou=people,o=company,c=us
uniqueMember: cn=bob,ou=people,o=company,c=us
uniqueMember: cn=bill,ou=people,o=company,c=us
uniqueMember: cn=carol,ou=people,o=company,c=us
uniqueMember: cn=frank,ou=people,o=company,c=us
uniqueMember: cn=alice,ou=people,o=company,c=us

在我的代码中,我将所有这些条目表示为dicts。我正在使用Python的LDIF编写器将这些条目写入适当的LDIF。导出整件事很容易:

def dump_ldif(self):
    writer = LDIFWriter(open('entrybackup.ldif', 'wb'))
       writer.unparse(cn=myorg, self.all_the_teams.get_teamstr_by_name('{'objectClass': ['top', 'CompanyTeams', 'groupOfUniqueNames']'owner': ['cn=john,ou=people,o=company,c=us'], 'uniqueMember': ['uniqueMember: cn=bob,ou=people,o=company,c=us','uniqueMember: cn=bill,ou=people,o=company,c=us','uniqueMember: cn=carol,ou=people,o=company,c=us','uniqueMember: cn=frank,ou=people,o=company,c=us','uniqueMember: cn=alice,ou=people,o=company,c=us'], 'cn': ['myorg']}')

但是你如何使用删除/修改操作符的LDIF输出?我有一份我想要离开的uniqueMember列表:

['cn=bob,ou=people,o=company,c=us', 'cn=bill,ou=people,o=company,c=us']

而且(我相信)这是LDIF格式的最终​​目标,从我的列表中拉出来:

dn: cn=myorg,ou=teams,ou=groups,o=company,c=us
changetype: modify
delete: uniqueMember
uniqueMember: cn=bob,ou=people,o=company,c=us
uniqueMember: cn=bill,ou=people,o=company,c=us

使用Python(2.7)有没有一些简单的方法可以做到这一点?开始感到疯狂。注意:我可以只进行文本输出/操作,但我想坚持使用LDIFWriter来编写此输出。我只想找到输出'删除'LDIF指令的语法。

1 个答案:

答案 0 :(得分:0)

我不是最伟大的Python专家,但LDAP是我的小蛋糕。

您传递给writer的条目只是一个带有值的数据对象,而Python LDIFWriter实际上是一个简单的类,它将其语法转换为LDIF。

我认为您应该做的是,将您的条目转换为修改,然后然后将其转移到LDIFWriter上,如下所示:

entry={ 'changetype' : ['modify'],
             'delete': ['uniqueMember'],
       'uniqueMember': ['cn=bob,ou=people,o=company,c=us','cn=bill,ou=people,o=company,c=us'],
      }
writer.unparse('cn=myorg', entry)

修改

如果您有一个名为deletes的已删除用户的数组,您可以将其传递到以下条目中:

'uniqueMember': deletes

似乎工作: - )