Skip to content

Commit

Permalink
s4-dbcheck: Add lastKnownParent when moving an object to lostAndFound
Browse files Browse the repository at this point in the history
Autobuild-User(master): Andrew Bartlett <[email protected]>
Autobuild-Date(master): Sat Jul 28 05:40:43 CEST 2012 on sn-devel-104
  • Loading branch information
abartlet committed Jul 28, 2012
1 parent dc00df2 commit 6a37b55
Showing 1 changed file with 28 additions and 7 deletions.
35 changes: 28 additions & 7 deletions source4/scripting/python/samba/dbchecker.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,13 +366,34 @@ def err_missing_parent(self, obj):
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'''
Expand Down

0 comments on commit 6a37b55

Please sign in to comment.