idmap_autorid: change idmap_autorid_loadconfig() to return NTSTATUS
authorMichael Adam <obnox@samba.org>
Tue, 10 Sep 2013 16:07:15 +0000 (18:07 +0200)
committerMichael Adam <obnox@samba.org>
Tue, 1 Oct 2013 08:49:11 +0000 (10:49 +0200)
for better error propagation.

Pair-Programmed-With: Atul Kulkarni <atul.kulkarni@in.ibm.com>

Signed-off-by: Michael Adam <obnox@samba.org>
Signed-off-by: Atul Kulkarni <atul.kulkarni@in.ibm.com>
source3/include/idmap_autorid.h
source3/winbindd/idmap_autorid.c
source3/winbindd/idmap_autorid_tdb.c

index 2702f4cf0967682f4bd1c9f5b18be691ebe36264..e385f493b62a22cae0e2138871d15c3991c372ee 100644 (file)
@@ -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);
index f303b0cf25accf9ebe688047cd321ae7e60e735c..928d8c84c19593085707a2aae0fa8b15209f199d 100644 (file)
@@ -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)) {
index e57934900612e676d925a91bc9814422184ce562..1f2d33ec4c38e9d70ff87c7b3c40ec5a710fc815 100644 (file)
@@ -293,36 +293,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,