From 6a37b55dfb2d8e6683538400d41c2b139a553eaa Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 28 Jul 2012 10:59:09 +1000 Subject: [PATCH] s4-dbcheck: Add lastKnownParent when moving an object to lostAndFound Autobuild-User(master): Andrew Bartlett Autobuild-Date(master): Sat Jul 28 05:40:43 CEST 2012 on sn-devel-104 --- source4/scripting/python/samba/dbchecker.py | 35 +++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/source4/scripting/python/samba/dbchecker.py b/source4/scripting/python/samba/dbchecker.py index 03ec7abc828..a6495fc8e11 100644 --- a/source4/scripting/python/samba/dbchecker.py +++ b/source4/scripting/python/samba/dbchecker.py @@ -366,13 +366,34 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base))) self.report('Not moving object %s into LostAndFound' % (obj.dn)) return - nc_root = self.samdb.get_nc_root(obj.dn); - lost_and_found = self.samdb.get_wellknown_dn(nc_root, dsdb.DS_GUID_LOSTANDFOUND_CONTAINER) - new_dn = ldb.Dn(self.samdb, str(obj.dn)) - new_dn.remove_base_components(len(new_dn) - 1) - if self.do_rename(obj.dn, new_dn, lost_and_found, ["show_deleted:0", "relax:0"], - "Failed to rename object %s into lostAndFound at %s" % (obj.dn, new_dn + lost_and_found)): - self.report("Renamed object %s into lostAndFound at %s" % (obj.dn, new_dn + lost_and_found)) + keep_transaction = True + self.samdb.transaction_start() + try: + nc_root = self.samdb.get_nc_root(obj.dn); + lost_and_found = self.samdb.get_wellknown_dn(nc_root, dsdb.DS_GUID_LOSTANDFOUND_CONTAINER) + new_dn = ldb.Dn(self.samdb, str(obj.dn)) + new_dn.remove_base_components(len(new_dn) - 1) + if self.do_rename(obj.dn, new_dn, lost_and_found, ["show_deleted:0", "relax:0"], + "Failed to rename object %s into lostAndFound at %s" % (obj.dn, new_dn + lost_and_found)): + self.report("Renamed object %s into lostAndFound at %s" % (obj.dn, new_dn + lost_and_found)) + + m = ldb.Message() + m.dn = obj.dn + m['lastKnownParent'] = ldb.MessageElement(str(obj.dn.parent()), ldb.FLAG_MOD_REPLACE, 'lastKnownParent') + + if self.do_modify(m, [], + "Failed to set lastKnownParent on lostAndFound object at %s" % (new_dn + lost_and_found)): + self.report("Set lastKnownParent on lostAndFound object at %s" % (new_dn + lost_and_found)) + keep_transaction = True + except: + self.samdb.transaction_cancel() + raise + + if keep_transaction: + self.samdb.transaction_commit() + else: + self.samdb.transaction_cancel() + def err_wrong_instancetype(self, obj, calculated_instancetype): '''handle a wrong instanceType''' -- 2.11.4.GIT