summaryrefslogtreecommitdiff
path: root/source4/dsdb
diff options
context:
space:
mode:
authorKamen Mazdrashki <kamenim@samba.org>2010-12-16 22:31:28 +0200
committerKamen Mazdrashki <kamenim@samba.org>2010-12-18 05:32:14 +0200
commitbd6f9efc1e993d41d14da3ac56307ed424745153 (patch)
treea82131fca4c4ca6421b92e5883496e38c66f684f /source4/dsdb
parent09a2f14c84de1da658009c62572c7cbffb07febc (diff)
downloadsamba-bd6f9efc1e993d41d14da3ac56307ed424745153.tar.gz
samba-bd6f9efc1e993d41d14da3ac56307ed424745153.tar.bz2
samba-bd6f9efc1e993d41d14da3ac56307ed424745153.zip
s4-drepl: Make refreshed schema a global one
We need to do this as dsdb_reference_schema() function clears "use_global_schema" ldb flag. Basically what is going to happen is that after dsdb_reference_schema() global_schema pointer will continue to point at old schema cache, while "dsdb_schema" for LDB will point at the working_schema. After replication is done, we reset "dsdb_schema" for the ldb with an updated Schema cache, but this leaves global_schema pointer with its old value, which is not up to date. So we need to call dsdb_make_schema_global() again so that global_schema points to a valid Schema cache.
Diffstat (limited to 'source4/dsdb')
-rw-r--r--source4/dsdb/repl/replicated_objects.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/source4/dsdb/repl/replicated_objects.c b/source4/dsdb/repl/replicated_objects.c
index d01d3c1e7f..5997073a8a 100644
--- a/source4/dsdb/repl/replicated_objects.c
+++ b/source4/dsdb/repl/replicated_objects.c
@@ -493,6 +493,7 @@ WERROR dsdb_replicated_objects_commit(struct ldb_context *ldb,
/* restore previous schema */
if (cur_schema ) {
dsdb_reference_schema(ldb, cur_schema, false);
+ dsdb_make_schema_global(ldb, cur_schema);
}
DEBUG(0,("Failed to apply records: %s: %s\n",
@@ -507,6 +508,7 @@ WERROR dsdb_replicated_objects_commit(struct ldb_context *ldb,
/* restore previous schema */
if (cur_schema ) {
dsdb_reference_schema(ldb, cur_schema, false);
+ dsdb_make_schema_global(ldb, cur_schema);
}
DEBUG(0,(__location__ " Failed to prepare commit of transaction: %s\n",
ldb_errstring(ldb)));
@@ -518,6 +520,7 @@ WERROR dsdb_replicated_objects_commit(struct ldb_context *ldb,
/* restore previous schema */
if (cur_schema ) {
dsdb_reference_schema(ldb, cur_schema, false);
+ dsdb_make_schema_global(ldb, cur_schema);
}
DEBUG(0,(__location__ " Failed to load partition uSN\n"));
ldb_transaction_cancel(ldb);
@@ -536,6 +539,7 @@ WERROR dsdb_replicated_objects_commit(struct ldb_context *ldb,
/* restore previous schema */
if (cur_schema ) {
dsdb_reference_schema(ldb, cur_schema, false);
+ dsdb_make_schema_global(ldb, cur_schema);
}
DEBUG(0,(__location__ " Failed to commit transaction\n"));
return WERR_FOOBAR;
@@ -549,6 +553,9 @@ WERROR dsdb_replicated_objects_commit(struct ldb_context *ldb,
cur_schema = dsdb_get_schema(ldb, NULL);
/* TODO: What we do in case dsdb_get_schema() fail?
* We can't fallback at this point anymore */
+ if (cur_schema) {
+ dsdb_make_schema_global(ldb, cur_schema);
+ }
}
DEBUG(2,("Replicated %u objects (%u linked attributes) for %s\n",