summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2011-12-08 11:47:59 +1100
committerAndrew Tridgell <tridge@samba.org>2011-12-08 03:23:49 +0100
commit86338ab551baf7c5dc4f63a1a103880e886acf69 (patch)
tree398a8766d9cf0eb0d362a47fc02d06e4a89a080a
parent819f11285d12041f2a22a6c92ebabb8a559886c5 (diff)
downloadsamba-86338ab551baf7c5dc4f63a1a103880e886acf69.tar.gz
samba-86338ab551baf7c5dc4f63a1a103880e886acf69.tar.bz2
samba-86338ab551baf7c5dc4f63a1a103880e886acf69.zip
dbcheck: cope with objects disappearing during checking
Autobuild-User: Andrew Tridgell <tridge@samba.org> Autobuild-Date: Thu Dec 8 03:23:49 CET 2011 on sn-devel-104
-rw-r--r--source4/scripting/python/samba/dbchecker.py20
-rw-r--r--source4/scripting/python/samba/netcmd/dbcheck.py2
2 files changed, 16 insertions, 6 deletions
diff --git a/source4/scripting/python/samba/dbchecker.py b/source4/scripting/python/samba/dbchecker.py
index 6792538f75..ff3fd6ee38 100644
--- a/source4/scripting/python/samba/dbchecker.py
+++ b/source4/scripting/python/samba/dbchecker.py
@@ -30,7 +30,8 @@ from samba.common import dsdb_Dn
class dbcheck(object):
"""check a SAM database for errors"""
- def __init__(self, samdb, samdb_schema=None, verbose=False, fix=False, yes=False, quiet=False):
+ def __init__(self, samdb, samdb_schema=None, verbose=False, fix=False, yes=False,
+ quiet=False, in_transaction=False):
self.samdb = samdb
self.dict_oid_name = None
self.samdb_schema = (samdb_schema or samdb)
@@ -48,6 +49,7 @@ class dbcheck(object):
self.fix_time_metadata = False
self.fix_all_missing_backlinks = False
self.fix_all_orphaned_backlinks = False
+ self.in_transaction = in_transaction
def check_database(self, DN=None, scope=ldb.SCOPE_SUBTREE, controls=[], attrs=['*']):
'''perform a database check, returning the number of errors found'''
@@ -423,11 +425,19 @@ class dbcheck(object):
if '*' in attrs:
attrs.append("replPropertyMetaData")
- res = self.samdb.search(base=dn, scope=ldb.SCOPE_BASE,
- controls=["extended_dn:1:1", "show_recycled:1", "show_deleted:1"],
- attrs=attrs)
+ try:
+ res = self.samdb.search(base=dn, scope=ldb.SCOPE_BASE,
+ controls=["extended_dn:1:1", "show_recycled:1", "show_deleted:1"],
+ attrs=attrs)
+ except ldb.LdbError, (enum, estr):
+ if enum == ldb.ERR_NO_SUCH_OBJECT:
+ if self.in_transaction:
+ self.report("ERROR: Object %s disappeared during check" % dn)
+ return 1
+ return 0
+ raise
if len(res) != 1:
- self.report("Object %s disappeared during check" % dn)
+ self.report("ERROR: Object %s failed to load during check" % dn)
return 1
obj = res[0]
error_count = 0
diff --git a/source4/scripting/python/samba/netcmd/dbcheck.py b/source4/scripting/python/samba/netcmd/dbcheck.py
index 1d4a5b4f33..bd250eb6be 100644
--- a/source4/scripting/python/samba/netcmd/dbcheck.py
+++ b/source4/scripting/python/samba/netcmd/dbcheck.py
@@ -102,7 +102,7 @@ class cmd_dbcheck(Command):
started_transaction = True
try:
chk = dbcheck(samdb, samdb_schema=samdb_schema, verbose=verbose,
- fix=fix, yes=yes, quiet=quiet)
+ fix=fix, yes=yes, quiet=quiet, in_transaction=started_transaction)
if reindex:
self.outf.write("Re-indexing...\n")