summaryrefslogtreecommitdiffstats
path: root/keystone/identity
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-10-09 18:51:39 +0000
committerGerrit Code Review <review@openstack.org>2012-10-09 18:51:39 +0000
commitb0eb94dbc0aff690fcbde6d49c3ad5c6578eb7b5 (patch)
tree2443d6dc8b723f90dec4e7251f5c01cca9f5e943 /keystone/identity
parent8236d3b4f6945f6057252e6bc195bec103e9b12d (diff)
parentee48c24184462724aa85b603296adb9f3f68934e (diff)
downloadkeystone-b0eb94dbc0aff690fcbde6d49c3ad5c6578eb7b5.tar.gz
keystone-b0eb94dbc0aff690fcbde6d49c3ad5c6578eb7b5.tar.xz
keystone-b0eb94dbc0aff690fcbde6d49c3ad5c6578eb7b5.zip
Merge "Unable to delete tenant if contains roles in LDAP backend (bug 1057407)"
Diffstat (limited to 'keystone/identity')
-rw-r--r--keystone/identity/backends/ldap/core.py20
1 files changed, 19 insertions, 1 deletions
diff --git a/keystone/identity/backends/ldap/core.py b/keystone/identity/backends/ldap/core.py
index 21b7f1d5..deb78e43 100644
--- a/keystone/identity/backends/ldap/core.py
+++ b/keystone/identity/backends/ldap/core.py
@@ -572,7 +572,11 @@ class TenantApi(common_ldap.BaseLdap, ApiShimMixin):
return list(res)
def delete(self, id):
- super(TenantApi, self).delete(id)
+ if self.subtree_delete_enabled:
+ super(TenantApi, self).deleteTree(id)
+ else:
+ self.role_api.roles_delete_subtree_by_tenant(id)
+ super(TenantApi, self).delete(id)
def update(self, id, values):
try:
@@ -894,6 +898,20 @@ class RoleApi(common_ldap.BaseLdap, ApiShimMixin):
tenant_id=tenant_id))
return res
+ def roles_delete_subtree_by_tenant(self, tenant_id):
+ conn = self.get_connection()
+ query = '(objectClass=%s)' % self.object_class
+ tenant_dn = self.tenant_api._id_to_dn(tenant_id)
+ try:
+ roles = conn.search_s(tenant_dn, ldap.SCOPE_ONELEVEL, query)
+ for role_dn, _ in roles:
+ try:
+ conn.delete_s(role_dn)
+ except Exception as inst:
+ raise inst
+ except ldap.NO_SUCH_OBJECT:
+ pass
+
def rolegrant_get_by_ids(self, user_id, role_id, tenant_id):
conn = self.get_connection()
user_dn = self.user_api._id_to_dn(user_id)