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

Delete an attribute in LDAP using LDIF with Python

我想做的(我想的)是一件很简单的事情。我有一个看起来像这样的 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

在我的代码中,我将所有这些条目表示为字典。我正在使用 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']}')

但是如何获得使用 delete/modify 运算符的 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) 做到这一点吗?开始感到疯狂。注意:我可以只做文本 output/manipulation,但我想坚持使用 LDIFWriter 来编写此输出。我只想找到输出 'delete' LDIF 指令的语法。

我不是最伟大的 Python 专家,但 LDAP 是我的小菜一碟。

您传递给编写器的条目只是一个具有值的数据对象,而 Python LDIFWriter 实际上是一个直接的 class,它将其语法转换为 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

似乎有效:-)