The Samba-Bugzilla – Attachment 12409 Details for
Bug 12178
samba-tool dbcheck fails to fix replPropertyMetaData
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch for master
dbcheck-rmd.patch (text/plain), 5.29 KB, created by
Andrew Bartlett
on 2016-08-26 03:56:41 UTC
(
hide
)
Description:
patch for master
Filename:
MIME Type:
Creator:
Andrew Bartlett
Created:
2016-08-26 03:56:41 UTC
Size:
5.29 KB
patch
obsolete
>From 1510609a01904539b650dcb5cbf965c8ecebaca4 Mon Sep 17 00:00:00 2001 >From: Andrew Bartlett <abartlet@samba.org> >Date: Fri, 26 Aug 2016 15:54:35 +1200 >Subject: [PATCH 1/2] dsdb: Allow missing a mandatory attribute from a dbcheck > fix > >dbcheck of the rid pool (CN=RID Set) for another server will otherwise fail because >rIDNextRid is not replicated, and so it not present > >Signed-off-by: Andrew Bartlett <abartlet@samba.org> >--- > source4/dsdb/samdb/ldb_modules/objectclass_attrs.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > >diff --git a/source4/dsdb/samdb/ldb_modules/objectclass_attrs.c b/source4/dsdb/samdb/ldb_modules/objectclass_attrs.c >index f739c40..d21b8f7 100644 >--- a/source4/dsdb/samdb/ldb_modules/objectclass_attrs.c >+++ b/source4/dsdb/samdb/ldb_modules/objectclass_attrs.c >@@ -419,8 +419,13 @@ static int attr_handler2(struct oc_context *ac) > } > } > >+ /* We skip this check under dbcheck to allow fixing of other >+ * attributes even if an attribute is missing. This matters >+ * for CN=RID Set as the required attribute rIDNextRid is not >+ * replicated */ > if (found_must_contain[0] != NULL && >- ldb_msg_check_string_attribute(msg, "isDeleted", "TRUE") == 0) { >+ ldb_msg_check_string_attribute(msg, "isDeleted", "TRUE") == 0 && >+ ldb_request_get_control(ac->req, DSDB_CONTROL_DBCHECK) == NULL) { > ldb_asprintf_errstring(ldb, "objectclass_attrs: at least one mandatory attribute ('%s') on entry '%s' wasn't specified!", > found_must_contain[0], > ldb_dn_get_linearized(msg->dn)); >-- >2.8.1 > > >From d66c5ce4627d6edc51bc5c099903669c1f30957d Mon Sep 17 00:00:00 2001 >From: Andrew Bartlett <abartlet@samba.org> >Date: Fri, 26 Aug 2016 15:53:19 +1200 >Subject: [PATCH 2/2] dbcheck: Abandon dbcheck if we get an error during a > transaction > >Otherwise, anything that the transaction has already done to the DB will be left in the DB >even despite the failure. For example, if a fix wrote to the DB, but then failed a post-write >check, then the fix will not be unrolled. > >This is because we do not have nested transactions in TDB > >Signed-off-by: Andrew Bartlett <abartlet@samba.org> >--- > python/samba/dbchecker.py | 9 ++++++++- > testprogs/blackbox/dbcheck-oldrelease.sh | 10 ++++++++++ > 2 files changed, 18 insertions(+), 1 deletion(-) > >diff --git a/python/samba/dbchecker.py b/python/samba/dbchecker.py >index e904b4a..fab0b61 100644 >--- a/python/samba/dbchecker.py >+++ b/python/samba/dbchecker.py >@@ -31,7 +31,8 @@ from samba.common import dsdb_Dn > from samba.dcerpc import security > from samba.descriptor import get_wellknown_sds, get_diff_sds > from samba.auth import system_session, admin_session >- >+from samba.netcmd import CommandError >+ > > class dbcheck(object): > """check a SAM database for errors""" >@@ -324,6 +325,8 @@ systemFlags: -1946157056%s""" % (dn, guid_suffix), > controls = controls + ["local_oid:%s:0" % dsdb.DSDB_CONTROL_DBCHECK] > self.samdb.delete(dn, controls=controls) > except Exception, err: >+ if self.in_transaction: >+ raise CommandError("%s : %s" % (msg, err)) > self.report("%s : %s" % (msg, err)) > return False > return True >@@ -336,6 +339,8 @@ systemFlags: -1946157056%s""" % (dn, guid_suffix), > controls = controls + ["local_oid:%s:0" % dsdb.DSDB_CONTROL_DBCHECK] > self.samdb.modify(m, controls=controls, validate=validate) > except Exception, err: >+ if self.in_transaction: >+ raise CommandError("%s : %s" % (msg, err)) > self.report("%s : %s" % (msg, err)) > return False > return True >@@ -353,6 +358,8 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base))) > controls = controls + ["local_oid:%s:0" % dsdb.DSDB_CONTROL_DBCHECK] > self.samdb.rename(from_dn, to_dn, controls=controls) > except Exception, err: >+ if self.in_transaction: >+ raise CommandError("%s : %s" % (msg, err)) > self.report("%s : %s" % (msg, err)) > return False > return True >diff --git a/testprogs/blackbox/dbcheck-oldrelease.sh b/testprogs/blackbox/dbcheck-oldrelease.sh >index 1efea67..dd176cf 100755 >--- a/testprogs/blackbox/dbcheck-oldrelease.sh >+++ b/testprogs/blackbox/dbcheck-oldrelease.sh >@@ -186,6 +186,15 @@ check_expected_before_values() { > } > > # This should 'fail', because it returns the number of modified records >+dbcheck_objectclass() { >+ if [ x$RELEASE = x"release-4-1-6-partial-object" ]; then >+ $PYTHON $BINDIR/samba-tool dbcheck --cross-ncs --fix --yes -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --attrs=objectclass $@ >+ else >+ return 1 >+ fi >+} >+ >+# This should 'fail', because it returns the number of modified records > dbcheck() { > $PYTHON $BINDIR/samba-tool dbcheck --cross-ncs --fix --yes -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $@ > } >@@ -363,6 +372,7 @@ if [ -d $release_dir ]; then > testit "reindex" reindex > testit "current_version_mod" do_current_version_mod > testit "check_expected_before_values" check_expected_before_values >+ testit_expect_failure "dbcheck_objectclass" dbcheck_objectclass > testit_expect_failure "dbcheck" dbcheck > testit "check_expected_after_values" check_expected_after_values > testit "check_forced_duplicate_values" check_forced_duplicate_values >-- >2.8.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
metze
:
review+
Actions:
View
Attachments on
bug 12178
:
12406
|
12407
| 12409 |
12417
|
12418
|
12419