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)
committerVolker Lendecke <vl@samba.org>
Tue, 1 Oct 2013 12:04:44 +0000 (12:04 +0000)
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>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/include/idmap_autorid_tdb.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 d6fd0b9c569329f664d739c894d16dbde6bed82a..60ce33c35f738a5f3a52374c4c19aa783718d122 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 29d3a4dc0179de17bd1dc42eb1edbeeecd5eaba0..7ded36f84753ccbd7e68f9ca32ac1575c8b252d1 100644 (file)
@@ -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,