On 04/14/2015 10:39 AM, Jan Cholasta wrote:
Dne 12.4.2015 v 18:51 thierry bordaz napsal(a):
...
Please wrap long lines:
new_dn = DN((self.obj.primary_key.name,
entry_attrs[self.obj.primary_key.name]),
*entry_attrs.dn[1:])
self._exc_wrapper(keys, options, ldap.move_entry)(
entry_attrs.dn, new_dn)
and:
self.conn.rename_s(dn, new_rdn, newsuperior=new_superior,
delold=int(del_old))
Also, you don't need to include your login in the author header (it's
part of your email address) or the reviewed by line in the commit
message (it's automatically added by ipatool when the commit is pushed).
Here is the updated patch. Thanks for the git tips :-)
thanks
theirry
From 0e35c90d83d8a79be62f3d6ceca71fb2393beb72 Mon Sep 17 00:00:00 2001
From: Thierry Bordaz <[email protected]>
Date: Wed, 15 Apr 2015 15:48:21 +0200
Subject: [PATCH] User life cycle: allows MODRDN from ldap2
enhance update_entry_rdn so that is allows
to move an entry a new superior
https://fedorahosted.org/freeipa/ticket/3813
---
ipalib/plugins/baseldap.py | 8 +++++---
ipapython/ipaldap.py | 29 +++++++++++++++++++++++------
2 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/ipalib/plugins/baseldap.py b/ipalib/plugins/baseldap.py
index 4b1c701924d57919538e0c428ea181c2e898505e..0b1a48107ba475cc9b4e2e4ab13d101a4bd85c54 100644
--- a/ipalib/plugins/baseldap.py
+++ b/ipalib/plugins/baseldap.py
@@ -1417,10 +1417,12 @@ class LDAPUpdate(LDAPQuery, crud.Update):
if self.obj.rdn_is_primary_key and self.obj.primary_key.name in entry_attrs:
try:
# RDN change
- self._exc_wrapper(keys, options, ldap.update_entry_rdn)(
+ new_dn = DN((self.obj.primary_key.name,
+ entry_attrs[self.obj.primary_key.name]),
+ *entry_attrs.dn[1:])
+ self._exc_wrapper(keys, options, ldap.move_entry)(
entry_attrs.dn,
- RDN((self.obj.primary_key.name,
- entry_attrs[self.obj.primary_key.name])))
+ new_dn)
rdnkeys = keys[:-1] + (entry_attrs[self.obj.primary_key.name], )
entry_attrs.dn = self.obj.get_dn(*rdnkeys)
diff --git a/ipapython/ipaldap.py b/ipapython/ipaldap.py
index ce07006eb790c80fd42bd6eb611732ce9000db13..fd5e203c295c27d444a93e3ec084d5caf3302eba 100644
--- a/ipapython/ipaldap.py
+++ b/ipapython/ipaldap.py
@@ -581,6 +581,9 @@ class IPASimpleLDAPObject(object):
dn = str(dn)
assert isinstance(newrdn, (DN, RDN))
newrdn = str(newrdn)
+ if newsuperior:
+ assert isinstance(newsuperior, DN)
+ newsuperior = str(newsuperior)
return self.conn.rename_s(dn, newrdn, newsuperior, delold)
def result(self, msgid=ldap.RES_ANY, all=1, timeout=None):
@@ -1593,21 +1596,35 @@ class LDAPClient(object):
entry.reset_modlist()
- def update_entry_rdn(self, dn, new_rdn, del_old=True):
+ def move_entry(self, dn, new_dn, del_old=True):
"""
- Update entry's relative distinguished name.
+ Move an entry (either to a new superior or/and changing relative distinguished name)
Keyword arguments:
+ dn: DN of the source entry
+ new_dn: DN of the target entry
del_old -- delete old RDN value (default True)
+
+ :raises:
+ errors.NotFound if source entry or target superior entry doesn't exist
+ errors.EmptyModlist if source and target are identical
"""
-
assert isinstance(dn, DN)
- assert isinstance(new_rdn, RDN)
+ assert isinstance(new_dn, DN)
- if dn[0] == new_rdn:
+ if new_dn == dn:
raise errors.EmptyModlist()
+
+ new_rdn = new_dn[0]
+
+ if new_dn[1:] == dn[1:]:
+ new_superior = None
+ else:
+ new_superior = DN(*new_dn[1:])
+
with self.error_handler():
- self.conn.rename_s(dn, new_rdn, delold=int(del_old))
+ self.conn.rename_s(dn, new_rdn, newsuperior=new_superior,
+ delold=int(del_old))
time.sleep(.3) # Give memberOf plugin a chance to work
def update_entry(self, entry, entry_attrs=None):
--
1.7.11.7
--
Manage your subscription for the Freeipa-devel mailing list:
https://www.redhat.com/mailman/listinfo/freeipa-devel
Contribute to FreeIPA: http://www.freeipa.org/page/Contribute/Code