def __init__(self, samdb, samdb_schema=None, verbose=False, fix=False,
yes=False, quiet=False, in_transaction=False,
+ quick_membership_checks=False,
reset_well_known_acls=False):
self.samdb = samdb
self.dict_oid_name = None
self.fix_utf8_userparameters = False
self.fix_doubled_userparameters = False
self.fix_sid_rid_set_conflict = False
+ self.quick_membership_checks = quick_membership_checks
self.reset_well_known_acls = reset_well_known_acls
self.reset_all_well_known_acls = False
self.in_transaction = in_transaction
else:
reverse_syntax_oid = None
- error_count, duplicate_dict, unique_dict = \
- self.check_duplicate_links(obj, attrname, syntax_oid, linkID, reverse_link_name)
+ is_member_link = attrname in ("member", "memberOf")
+ if is_member_link and self.quick_membership_checks:
+ duplicate_dict = {}
+ else:
+ error_count, duplicate_dict, unique_dict = \
+ self.check_duplicate_links(obj, attrname, syntax_oid,
+ linkID, reverse_link_name)
if len(duplicate_dict) != 0:
dsdb_dn, res[0].dn)
continue
+ if is_member_link and self.quick_membership_checks:
+ continue
+
# check the reverse_link is correct if there should be one
match_count = 0
if reverse_link_name in res[0]:
Option("--reindex", dest="reindex", default=False, action="store_true", help="force database re-index"),
Option("--force-modules", dest="force_modules", default=False, action="store_true", help="force loading of Samba modules and ignore the @MODULES record (for very old databases)"),
Option("--reset-well-known-acls", dest="reset_well_known_acls", default=False, action="store_true", help="reset ACLs on objects with well known default ACL values to the default"),
+ Option("--quick-membership-checks", dest="quick_membership_checks",
+ help=("Skips missing/orphaned memberOf backlinks checks, "
+ "but speeds up dbcheck dramatically for domains with "
+ "large groups"),
+ default=False, action="store_true"),
Option("-H", "--URL", help="LDB URL for database or target server (defaults to local SAM database)",
type=str, metavar="URL", dest="H"),
]
cross_ncs=False, quiet=False,
scope="SUB", credopts=None, sambaopts=None, versionopts=None,
attrs=None, reindex=False, force_modules=False,
+ quick_membership_checks=False,
reset_well_known_acls=False, yes_rules=[]):
lp = sambaopts.get_loadparm()
started_transaction = True
try:
chk = dbcheck(samdb, samdb_schema=samdb_schema, verbose=verbose,
- fix=fix, yes=yes, quiet=quiet, in_transaction=started_transaction,
+ fix=fix, yes=yes, quiet=quiet,
+ in_transaction=started_transaction,
+ quick_membership_checks=quick_membership_checks,
reset_well_known_acls=reset_well_known_acls)
for option in yes_rules: