summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source3/include/idmap_autorid_tdb.h12
-rw-r--r--source3/winbindd/idmap_autorid_tdb.c47
2 files changed, 50 insertions, 9 deletions
diff --git a/source3/include/idmap_autorid_tdb.h b/source3/include/idmap_autorid_tdb.h
index acf402690c..2d2d01ade3 100644
--- a/source3/include/idmap_autorid_tdb.h
+++ b/source3/include/idmap_autorid_tdb.h
@@ -109,6 +109,18 @@ NTSTATUS idmap_autorid_delete_range_by_num(struct db_context *db,
NTSTATUS idmap_autorid_init_hwm(struct db_context *db, const char *hwm);
/**
+ * Open and possibly create the autorid database.
+ */
+NTSTATUS idmap_autorid_db_open(const char *path,
+ TALLOC_CTX *mem_ctx,
+ struct db_context **db);
+
+/**
+ * Initialize the high watermark records in the database.
+ */
+NTSTATUS idmap_autorid_init_hwms(struct db_context *db);
+
+/**
* Initialize an idmap_autorid database.
* After this function has successfully completed, the following are true:
* - the database exists
diff --git a/source3/winbindd/idmap_autorid_tdb.c b/source3/winbindd/idmap_autorid_tdb.c
index cbd9080146..21e15089e9 100644
--- a/source3/winbindd/idmap_autorid_tdb.c
+++ b/source3/winbindd/idmap_autorid_tdb.c
@@ -699,10 +699,10 @@ NTSTATUS idmap_autorid_delete_range_by_num(struct db_context *db,
return status;
}
-/*
- * open and initialize the database which stores the ranges for the domains
+/**
+ * Open and possibly create the database.
*/
-NTSTATUS idmap_autorid_db_init(const char *path,
+NTSTATUS idmap_autorid_db_open(const char *path,
TALLOC_CTX *mem_ctx,
struct db_context **db)
{
@@ -722,19 +722,48 @@ NTSTATUS idmap_autorid_db_init(const char *path,
return NT_STATUS_UNSUCCESSFUL;
}
- /* Initialize high water mark for the currently used range to 0 */
+ return status;
+}
+
+/**
+ * Initialize the high watermark records in the database.
+ */
+NTSTATUS idmap_autorid_init_hwms(struct db_context *db)
+{
+ NTSTATUS status;
- status = idmap_autorid_init_hwm(*db, HWM);
- NT_STATUS_NOT_OK_RETURN(status);
+ status = idmap_autorid_init_hwm(db, HWM);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
- status = idmap_autorid_init_hwm(*db, ALLOC_HWM_UID);
- NT_STATUS_NOT_OK_RETURN(status);
+ status = idmap_autorid_init_hwm(db, ALLOC_HWM_UID);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
- status = idmap_autorid_init_hwm(*db, ALLOC_HWM_GID);
+ status = idmap_autorid_init_hwm(db, ALLOC_HWM_GID);
return status;
}
+NTSTATUS idmap_autorid_db_init(const char *path,
+ TALLOC_CTX *mem_ctx,
+ struct db_context **db)
+{
+ NTSTATUS status;
+
+ status = idmap_autorid_db_open(path, mem_ctx, db);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ status = idmap_autorid_init_hwms(*db);
+ return status;
+}
+
+
+
struct idmap_autorid_fetch_config_state {
TALLOC_CTX *mem_ctx;
char *configstr;