summaryrefslogtreecommitdiff
path: root/source4/dsdb/samdb/ldb_modules/partition_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/dsdb/samdb/ldb_modules/partition_init.c')
-rw-r--r--source4/dsdb/samdb/ldb_modules/partition_init.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/partition_init.c b/source4/dsdb/samdb/ldb_modules/partition_init.c
index cfec1aa585..2da938d20e 100644
--- a/source4/dsdb/samdb/ldb_modules/partition_init.c
+++ b/source4/dsdb/samdb/ldb_modules/partition_init.c
@@ -159,6 +159,38 @@ static int partition_reload_metadata(struct ldb_module *module, struct partition
return LDB_SUCCESS;
}
+int partition_reload_if_required(struct ldb_module *module,
+ struct partition_private_data *data)
+
+{
+ uint64_t seq;
+ int ret;
+ TALLOC_CTX *mem_ctx = talloc_new(data);
+ if (!data) {
+ /* Not initilised yet */
+ return LDB_SUCCESS;
+ }
+ if (!mem_ctx) {
+ ldb_oom(ldb_module_get_ctx(module));
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
+ ret = partition_primary_sequence_number(module, mem_ctx, LDB_SEQ_HIGHEST_SEQ, &seq);
+ if (ret != LDB_SUCCESS) {
+ talloc_free(mem_ctx);
+ return ret;
+ }
+ if (seq != data->metadata_seq) {
+ ret = partition_reload_metadata(module, data, mem_ctx, NULL);
+ if (ret != LDB_SUCCESS) {
+ talloc_free(mem_ctx);
+ return ret;
+ }
+ data->metadata_seq = seq;
+ }
+ talloc_free(mem_ctx);
+ return LDB_SUCCESS;
+}
+
static const char **find_modules_for_dn(struct partition_private_data *data, struct ldb_dn *dn)
{
int i;
@@ -577,6 +609,12 @@ int partition_init(struct ldb_module *module)
return LDB_ERR_OPERATIONS_ERROR;
}
+ ret = partition_primary_sequence_number(module, mem_ctx, LDB_SEQ_HIGHEST_SEQ, &data->metadata_seq);
+ if (ret != LDB_SUCCESS) {
+ talloc_free(mem_ctx);
+ return ret;
+ }
+
ret = partition_reload_metadata(module, data, mem_ctx, &msg);
if (ret != LDB_SUCCESS) {
return ret;