From 802b9d7ec614e25ff99c367cfaf267d8334311f1 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Tue, 10 Sep 2013 18:07:15 +0200 Subject: [PATCH] idmap_autorid: change idmap_autorid_loadconfig() to return NTSTATUS for better error propagation. Pair-Programmed-With: Atul Kulkarni Signed-off-by: Michael Adam Signed-off-by: Atul Kulkarni Reviewed-by: Volker Lendecke --- source3/include/idmap_autorid_tdb.h | 5 +++-- source3/winbindd/idmap_autorid.c | 9 ++++++++- source3/winbindd/idmap_autorid_tdb.c | 20 +++++++++++++------- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/source3/include/idmap_autorid_tdb.h b/source3/include/idmap_autorid_tdb.h index 2702f4cf096..e385f493b62 100644 --- a/source3/include/idmap_autorid_tdb.h +++ b/source3/include/idmap_autorid_tdb.h @@ -63,8 +63,9 @@ NTSTATUS idmap_autorid_db_init(const char *path, TALLOC_CTX *mem_ctx, struct db_context **db); -struct autorid_global_config *idmap_autorid_loadconfig(struct db_context *db, - TALLOC_CTX *ctx); +NTSTATUS idmap_autorid_loadconfig(struct db_context *db, + TALLOC_CTX *ctx, + struct autorid_global_config **result); NTSTATUS idmap_autorid_saveconfig(struct db_context *db, struct autorid_global_config *cfg); diff --git a/source3/winbindd/idmap_autorid.c b/source3/winbindd/idmap_autorid.c index d6fd0b9c569..60ce33c35f7 100644 --- a/source3/winbindd/idmap_autorid.c +++ b/source3/winbindd/idmap_autorid.c @@ -665,7 +665,14 @@ static NTSTATUS idmap_autorid_initialize(struct idmap_domain *dom) config->minvalue, config->rangesize, config->maxranges)); /* read previously stored config and current HWM */ - storedconfig = idmap_autorid_loadconfig(autorid_db, talloc_tos()); + status = idmap_autorid_loadconfig(autorid_db, talloc_tos(), + &storedconfig); + if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_FOUND)) { + DEBUG(5, ("No configuration found. Storing initial " + "configuration.\n")); + } else if (!NT_STATUS_IS_OK(status)) { + goto error; + } status = dbwrap_fetch_uint32_bystring(autorid_db, HWM, &hwm); if (!NT_STATUS_IS_OK(status)) { diff --git a/source3/winbindd/idmap_autorid_tdb.c b/source3/winbindd/idmap_autorid_tdb.c index 29d3a4dc017..7ded36f8475 100644 --- a/source3/winbindd/idmap_autorid_tdb.c +++ b/source3/winbindd/idmap_autorid_tdb.c @@ -282,36 +282,42 @@ bool idmap_autorid_parse_configstr(const char *configstr, return true; } -struct autorid_global_config *idmap_autorid_loadconfig(struct db_context *db, - TALLOC_CTX *mem_ctx) +NTSTATUS idmap_autorid_loadconfig(struct db_context *db, + TALLOC_CTX *mem_ctx, + struct autorid_global_config **result) { struct autorid_global_config *cfg; NTSTATUS status; bool ok; char *configstr = NULL; + if (result == NULL) { + return NT_STATUS_INVALID_PARAMETER; + } + status = idmap_autorid_getconfigstr(db, mem_ctx, &configstr); if (!NT_STATUS_IS_OK(status)) { - return NULL; + return status; } cfg = talloc_zero(mem_ctx, struct autorid_global_config); - if (!cfg) { - return NULL; + if (cfg == NULL) { + return NT_STATUS_NO_MEMORY; } ok = idmap_autorid_parse_configstr(configstr, cfg); if (!ok) { talloc_free(cfg); - return NULL; + return NT_STATUS_INVALID_PARAMETER; } DEBUG(10, ("Loaded previously stored configuration " "minvalue:%d rangesize:%d\n", cfg->minvalue, cfg->rangesize)); - return cfg; + *result = cfg; + return NT_STATUS_OK; } NTSTATUS idmap_autorid_saveconfig(struct db_context *db, -- 2.11.4.GIT