mirror of
https://github.com/samba-team/samba.git
synced 2025-12-14 20:23:54 +03:00
dbcheck: do not crash on empty DN
we had
$ bin/samba-tool dbcheck -H st/rpc_proxy/private/sam.ldb
Checking 202 objects
ERROR(<class 'ValueError'>): uncaught exception - unable to parse dn string
File "/home/douglasb/src/samba/bin/python/samba/netcmd/__init__.py", line 230, in _run
return self.run(*args, **kwargs)
File "/home/douglasb/src/samba/bin/python/samba/netcmd/dbcheck.py", line 173, in run
error_count = chk.check_database(DN=DN, scope=search_scope,
File "/home/douglasb/src/samba/bin/python/samba/dbchecker.py", line 255, in check_database
error_count += self.check_object(object.dn, requested_attrs=attrs)
File "/home/douglasb/src/samba/bin/python/samba/dbchecker.py", line 2616, in check_object
expected_dn = ldb.Dn(self.samdb, "RDN=RDN,%s" % (parent_dn))
Now we have:
$ bin/samba-tool dbcheck -H st/rpc_proxy/private/sam.ldb
Checking 202 objects
ERROR: could not handle parent DN '': skipping RDN checks
Please use --fix to fix these errors
Checked 202 objects (1 errors)
which is still not really right, since --fix won't help.
(same with st/s4member/private/sam.ldb).
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
committed by
Andrew Bartlett
parent
2b039eb8c5
commit
d71258b455
@@ -2613,19 +2613,28 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base)))
|
||||
controls += ["local_oid:%s:1" % dsdb.DSDB_CONTROL_DBCHECK_FIX_LINK_DN_NAME]
|
||||
if parent_dn is None:
|
||||
parent_dn = obj.dn.parent()
|
||||
expected_dn = ldb.Dn(self.samdb, "RDN=RDN,%s" % (parent_dn))
|
||||
expected_dn.set_component(0, obj.dn.get_rdn_name(), name_val)
|
||||
|
||||
if obj.dn == deleted_objects_dn:
|
||||
expected_dn = obj.dn
|
||||
try:
|
||||
expected_dn = ldb.Dn(self.samdb, "RDN=RDN,%s" % (parent_dn))
|
||||
except ValueError as e:
|
||||
error_count += 1
|
||||
self.report(f"ERROR: could not handle parent DN '{parent_dn}': "
|
||||
"skipping RDN checks")
|
||||
else:
|
||||
expected_dn.set_component(0, obj.dn.get_rdn_name(), name_val)
|
||||
|
||||
if expected_dn != obj.dn:
|
||||
error_count += 1
|
||||
self.err_wrong_dn(obj, expected_dn, object_rdn_attr,
|
||||
object_rdn_val, name_val, controls)
|
||||
elif obj.dn.get_rdn_value() != object_rdn_val:
|
||||
error_count += 1
|
||||
self.report("ERROR: Not fixing %s=%r on '%s'" % (object_rdn_attr, object_rdn_val, str(obj.dn)))
|
||||
if obj.dn == deleted_objects_dn:
|
||||
expected_dn = obj.dn
|
||||
|
||||
if expected_dn != obj.dn:
|
||||
error_count += 1
|
||||
self.err_wrong_dn(obj, expected_dn, object_rdn_attr,
|
||||
object_rdn_val, name_val, controls)
|
||||
elif obj.dn.get_rdn_value() != object_rdn_val:
|
||||
error_count += 1
|
||||
self.report("ERROR: Not fixing %s=%r on '%s'" % (object_rdn_attr,
|
||||
object_rdn_val,
|
||||
obj.dn))
|
||||
|
||||
show_dn = True
|
||||
if repl_meta_data_val:
|
||||
|
||||
Reference in New Issue
Block a user