diff options
author | Michael Adam <obnox@samba.org> | 2013-04-26 00:52:49 +0200 |
---|---|---|
committer | Christian Ambach <ambi@samba.org> | 2013-05-06 16:33:40 +0200 |
commit | 7bc9563c96c0b91628ec501f8226c1adc24d083d (patch) | |
tree | 362e813946a1bbac04f854bfd2cef2fdc7a34d21 | |
parent | 9c6594dadbdd800470d4b217f1351fbba87989ba (diff) | |
download | samba-7bc9563c96c0b91628ec501f8226c1adc24d083d.tar.gz samba-7bc9563c96c0b91628ec501f8226c1adc24d083d.tar.bz2 samba-7bc9563c96c0b91628ec501f8226c1adc24d083d.zip |
s3:idmap:autorid: add a comment block explaining the calculations
Signed-off-by: Michael Adam <obnox@samba.org>
Reviewed-by: Christian Ambach <ambi@samba.org>
-rw-r--r-- | source3/winbindd/idmap_autorid.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/source3/winbindd/idmap_autorid.c b/source3/winbindd/idmap_autorid.c index 5ed0255bd0..391a31405f 100644 --- a/source3/winbindd/idmap_autorid.c +++ b/source3/winbindd/idmap_autorid.c @@ -22,6 +22,57 @@ * */ +/* + * This module allocates ranges for domains to be used in a + * algorithmic mode like idmap_rid. Multiple ranges are supported + * for a single domain: If a rid exceeds the range size, a matching + * range is allocated to hold the rid's id. + * + * Here are the formulas applied: + * + * + * For a sid of the form domain_sid-rid, we have + * + * rid = reduced_rid + domain_range_index * range_size + * + * with + * reduced_rid := rid % range_size + * domain_range_index := rid / range_size + * + * And reduced_rid fits into a range. + * + * In the database, we associate a range_number to + * the pair domain_sid,domain_range_index. + * + * Now the unix id for the given sid calculates as: + * + * id = reduced_rid + range_low_id + * + * with + * + * range_low_id = low_id + range_number * range_size + * + * + * The inverse calculation goes like this: + * + * Given a unix id, let + * + * normalized_id := id - low_id + * reduced_rid := normalized_id % range_size + * range_number = normalized_id / range_size + * + * Then we have + * + * id = reduced_rid + low_id + range_number * range_size + * + * From the database, get the domain_sid,domain_range_index pair + * belonging to the range_number (if there is already one). + * + * Then the rid for the unix id calculates as: + * + * rid = reduced_rid + domain_range_index * range_size + */ + #include "includes.h" #include "system/filesys.h" #include "winbindd.h" |