s3:idmap:autorid: calculate the range's low_id in idmap_autorid_get_domainrange()
authorMichael Adam <obnox@samba.org>
Thu, 25 Apr 2013 18:12:39 +0000 (20:12 +0200)
committerChristian Ambach <ambi@samba.org>
Mon, 6 May 2013 14:33:39 +0000 (16:33 +0200)
This way, the calculation needs to be don only in one central place and
the formulas get simpler.

Signed-off-by: Michael Adam <obnox@samba.org>
Reviewed-by: Christian Ambach <ambi@samba.org>
source3/winbindd/idmap_autorid.c

index d0a7b675e3ebcd4e23a1069f63e6af750557b1fb..32d5860ae61fa4e724922fb476bd04544f3a60bf 100644 (file)
@@ -54,6 +54,7 @@ struct autorid_range_config {
        fstring keystr;
        uint32_t rangenum;
        uint32_t domain_range_index;
+       uint32_t low_id;
        struct autorid_global_config *globalcfg;
 };
 
@@ -170,9 +171,13 @@ static NTSTATUS idmap_autorid_get_domainrange(struct autorid_range_config *range
                              idmap_autorid_get_domainrange_action, range);
        }
 
+       range->low_id = range->globalcfg->minvalue
+                     + range->rangenum * range->globalcfg->rangesize;
+
        DEBUG(10, ("Using range #%d for domain %s "
-                  "(domain_range_index=%"PRIu32")\n",
-                  range->rangenum, range->domsid, range->domain_range_index));
+                  "(domain_range_index=%"PRIu32", low_id=%"PRIu32")\n",
+                  range->rangenum, range->domsid, range->domain_range_index,
+                  range->low_id));
 
        return ret;
 }
@@ -220,9 +225,7 @@ static NTSTATUS idmap_autorid_allocate_id(struct idmap_domain *dom,
                return ret;
        }
 
-       xid->id = globalcfg->minvalue +
-                 globalcfg->rangesize * range.rangenum +
-                 xid->id;
+       xid->id = xid->id + range.low_id;
 
        DEBUG(10, ("Returned new %s %d from allocation range\n",
                   (xid->type==ID_TYPE_UID)?"uid":"gid", xid->id));
@@ -352,14 +355,12 @@ static NTSTATUS idmap_autorid_sid_to_id(struct autorid_global_config *global,
 {
        uint32_t rid;
        uint32_t reduced_rid;
-       uint32_t range_start;
 
        sid_peek_rid(map->sid, &rid);
 
        reduced_rid = rid % global->rangesize;
-       range_start = global->minvalue + range->rangenum * global->rangesize;
 
-       map->xid.id = reduced_rid + range_start;
+       map->xid.id = reduced_rid + range->low_id;
        map->xid.type = ID_TYPE_BOTH;
 
        /* We **really** should have some way of validating