s3:idmap:autorid: make calculation in idmap_autorid_sid_to_id much more obvious
authorMichael Adam <obnox@samba.org>
Thu, 25 Apr 2013 17:47:00 +0000 (19:47 +0200)
committerChristian Ambach <ambi@samba.org>
Mon, 6 May 2013 14:33:39 +0000 (16:33 +0200)
commit30a27ba428f346ff2fd56f9727ce0f1fb18a5a41
tree394d3d305760563ca25728fb04e6ee709557ac5e
parenta0ea6c2536b6b07f2fee799518b5f84da36e53ba
s3:idmap:autorid: make calculation in idmap_autorid_sid_to_id much more obvious

This is my attempt to make the sid->unix-id calculation much more obvious.
Especially with the introduction of the multi-range support an the originally
named "multiplier", the calculation

id = low_id + range_size * domain_number + rid - range_size * multiplier

was rather opaque to me.

What really happens here is this:
The rid is split into a reduced_rid part that is < rangesize and
a multiple of rangesize. This is given by the formula

rid = rid % range_size + (rid / range_size) * range_size

We define
 reduced_rid := rid % range_size
and
 domain_range_index := rid / range_size ( == the original multiplier)

and the original formula is equivalent to:

id = reduced_rid + low_id + range_number * range_size;

and reads

id = reduced_rid + range_minvalue

if we set range_minvalue := low_id + range_number * range_size.

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