From 29caafaf2888b25408fcafdb9767a003a910c1d7 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 4 Aug 2016 15:25:52 +1200 Subject: s4:dsdb/schema: Remove unused old schema from memory This avoids confusion when reading the talloc dump from a ldb context that has been the target of replication, as the dsdb_schema_copy_shallow() memory was still around, if unused. BUG: https://bugzilla.samba.org/show_bug.cgi?id=12115 Signed-off-by: Andrew Bartlett Reviewed-by: Stefan Metzmacher --- source4/dsdb/schema/schema_set.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'source4/dsdb/schema') diff --git a/source4/dsdb/schema/schema_set.c b/source4/dsdb/schema/schema_set.c index 1b29c4dce4b..a404e0acdfc 100644 --- a/source4/dsdb/schema/schema_set.c +++ b/source4/dsdb/schema/schema_set.c @@ -566,6 +566,8 @@ int dsdb_set_global_schema(struct ldb_context *ldb) { int ret; void *use_global_schema = (void *)1; + struct dsdb_schema *old_schema = ldb_get_opaque(ldb, "dsdb_schema"); + ret = ldb_set_opaque(ldb, "dsdb_use_global_schema", use_global_schema); if (ret != LDB_SUCCESS) { return ret; @@ -575,6 +577,16 @@ int dsdb_set_global_schema(struct ldb_context *ldb) return LDB_SUCCESS; } + /* Remove any pointer to a previous schema */ + ret = ldb_set_opaque(ldb, "dsdb_schema", NULL); + if (ret != LDB_SUCCESS) { + return ret; + } + + /* Remove the reference to the schema we just overwrote - if there was + * none, NULL is harmless here */ + talloc_unlink(ldb, old_schema); + /* Set the new attributes based on the new schema */ ret = dsdb_schema_set_indices_and_attributes(ldb, global_schema, false /* Don't write indices and attributes, it's expensive */); if (ret == LDB_SUCCESS) { -- cgit v1.2.1