idmap_autorid: factor out domain range fetching part from idmap_autorid_get_domainrange()
authorAtul Kulkarni <atul.kulkarni@in.ibm.com>
Fri, 30 Aug 2013 10:48:39 +0000 (16:18 +0530)
committerMichael Adam <obnox@samba.org>
Tue, 1 Oct 2013 08:49:15 +0000 (10:49 +0200)
Fatored out read-only function idmap_autorid_getrange() will be used elsewhere.

Pair-Programmed-With: Michael Adam <obnox@samba.org>

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

index 741c0c1884baf99f4ec86880b0c982011bc0e38b..9b216595ba9890bf2d9ebad90d3d4ea09401087a 100644 (file)
@@ -128,6 +128,9 @@ static NTSTATUS idmap_autorid_get_domainrange_action(struct db_context *db,
 
        range->rangenum = rangenum;
 
+       range->low_id = globalcfg->minvalue
+                     + range->rangenum * globalcfg->rangesize;
+
        return NT_STATUS_OK;
 
 error:
@@ -135,25 +138,48 @@ error:
 
 }
 
-NTSTATUS idmap_autorid_get_domainrange(struct db_context *db,
-                                      struct autorid_range_config *range,
-                                      bool read_only)
+static NTSTATUS idmap_autorid_getrange_int(struct db_context *db,
+                                          struct autorid_range_config *range)
 {
-       NTSTATUS ret;
-       struct autorid_global_config *globalcfg;
+       NTSTATUS status = NT_STATUS_INVALID_PARAMETER;
+       struct autorid_global_config *globalcfg = NULL;
        fstring keystr;
 
-       /*
-        * try to find mapping without locking the database,
-        * if it is not found create a mapping in a transaction unless
-        * read-only mode has been set
-        */
+       if (db == NULL || range == NULL) {
+               DEBUG(3, ("Invalid arguments received\n"));
+               goto done;
+       }
+
        idmap_autorid_build_keystr(range->domsid, range->domain_range_index,
                                   keystr);
 
-       ret = dbwrap_fetch_uint32_bystring(db, keystr,
-                                          &(range->rangenum));
+       DEBUG(10, ("reading domain range for key %s\n", keystr));
+       status = dbwrap_fetch_uint32_bystring(db, keystr, &(range->rangenum));
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(1, ("Failed to read database for key %s\n", keystr));
+               goto done;
+       }
+
+       status = idmap_autorid_loadconfig(db, talloc_tos(), &globalcfg);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(1, ("Failed to read global configuration"));
+               goto done;
+       }
+       range->low_id = globalcfg->minvalue
+                     + range->rangenum * globalcfg->rangesize;
+
+       talloc_free(globalcfg);
+done:
+       return status;
+}
+
+NTSTATUS idmap_autorid_get_domainrange(struct db_context *db,
+                                      struct autorid_range_config *range,
+                                      bool read_only)
+{
+       NTSTATUS ret;
 
+       ret = idmap_autorid_getrange_int(db, range);
        if (!NT_STATUS_IS_OK(ret)) {
                if (read_only) {
                        return NT_STATUS_NOT_FOUND;
@@ -162,19 +188,11 @@ NTSTATUS idmap_autorid_get_domainrange(struct db_context *db,
                              idmap_autorid_get_domainrange_action, range);
        }
 
-       ret = idmap_autorid_loadconfig(db, talloc_tos(), &globalcfg);
-       if (!NT_STATUS_IS_OK(ret)) {
-               return ret;
-       }
-       range->low_id = globalcfg->minvalue
-                     + range->rangenum * globalcfg->rangesize;
-
        DEBUG(10, ("Using range #%d for domain %s "
                   "(domain_range_index=%"PRIu32", low_id=%"PRIu32")\n",
                   range->rangenum, range->domsid, range->domain_range_index,
                   range->low_id));
 
-       talloc_free(globalcfg);
        return ret;
 }