|
|
403b09 |
From ef2480e2a9a10665208a6547fe3d3cb1d4047763 Mon Sep 17 00:00:00 2001
|
|
|
403b09 |
From: Martin Basti <mbasti@redhat.com>
|
|
|
403b09 |
Date: Fri, 19 Aug 2016 10:39:40 +0200
|
|
|
403b09 |
Subject: [PATCH] Raise DuplicatedEnrty error when user exists in
|
|
|
403b09 |
delete_container
|
|
|
403b09 |
|
|
|
403b09 |
We do not have right to write to users delete_container. In case that
|
|
|
403b09 |
user already exists in that container and we tried to add entry, we
|
|
|
403b09 |
receive ACIError. This must be checked and DuplicationEntry error must
|
|
|
403b09 |
be raised before.
|
|
|
403b09 |
|
|
|
403b09 |
https://fedorahosted.org/freeipa/ticket/6199
|
|
|
403b09 |
|
|
|
403b09 |
Reviewed-By: Jan Cholasta <jcholast@redhat.com>
|
|
|
403b09 |
---
|
|
|
403b09 |
ipaserver/plugins/user.py | 15 +++++++++++++--
|
|
|
403b09 |
1 file changed, 13 insertions(+), 2 deletions(-)
|
|
|
403b09 |
|
|
|
403b09 |
diff --git a/ipaserver/plugins/user.py b/ipaserver/plugins/user.py
|
|
|
403b09 |
index 935ea892cde9e2cb5b21f4714fd93e73c3fa53d5..d690f01ab4d155f6b403790a7215e1777f383604 100644
|
|
|
403b09 |
--- a/ipaserver/plugins/user.py
|
|
|
403b09 |
+++ b/ipaserver/plugins/user.py
|
|
|
403b09 |
@@ -381,6 +381,10 @@ class user(baseuser):
|
|
|
403b09 |
),
|
|
|
403b09 |
)
|
|
|
403b09 |
|
|
|
403b09 |
+ def get_delete_dn(self, *keys, **options):
|
|
|
403b09 |
+ active_dn = self.get_dn(*keys, **options)
|
|
|
403b09 |
+ return DN(active_dn[0], self.delete_container_dn, api.env.basedn)
|
|
|
403b09 |
+
|
|
|
403b09 |
def get_either_dn(self, *keys, **options):
|
|
|
403b09 |
'''
|
|
|
403b09 |
Returns the DN of a user
|
|
|
403b09 |
@@ -397,7 +401,7 @@ class user(baseuser):
|
|
|
403b09 |
dn = active_dn
|
|
|
403b09 |
except errors.NotFound:
|
|
|
403b09 |
# Check that this value is a Delete user
|
|
|
403b09 |
- delete_dn = DN(active_dn[0], self.delete_container_dn, api.env.basedn)
|
|
|
403b09 |
+ delete_dn = self.get_delete_dn(*keys, **options)
|
|
|
403b09 |
try:
|
|
|
403b09 |
ldap.get_entry(delete_dn, ['dn'])
|
|
|
403b09 |
|
|
|
403b09 |
@@ -441,7 +445,14 @@ class user_add(baseuser_add):
|
|
|
403b09 |
)
|
|
|
403b09 |
|
|
|
403b09 |
def pre_callback(self, ldap, dn, entry_attrs, attrs_list, *keys, **options):
|
|
|
403b09 |
- dn = self.obj.get_either_dn(*keys, **options)
|
|
|
403b09 |
+ delete_dn = self.obj.get_delete_dn(*keys, **options)
|
|
|
403b09 |
+ try:
|
|
|
403b09 |
+ ldap.get_entry(delete_dn, [''])
|
|
|
403b09 |
+ except errors.NotFound:
|
|
|
403b09 |
+ pass
|
|
|
403b09 |
+ else:
|
|
|
403b09 |
+ raise self.obj.handle_duplicate_entry(*keys)
|
|
|
403b09 |
+
|
|
|
403b09 |
if not options.get('noprivate', False):
|
|
|
403b09 |
try:
|
|
|
403b09 |
# The Managed Entries plugin will allow a user to be created
|
|
|
403b09 |
--
|
|
|
403b09 |
2.7.4
|
|
|
403b09 |
|