dsdb-ridalloc: Fix RID pools - RID numbers increase too quickly
authorAndrew Bartlett <abartlet@samba.org>
Sat, 22 Jun 2013 09:30:50 +0000 (19:30 +1000)
committerStefan Metzmacher <metze@samba.org>
Thu, 4 Jul 2013 18:13:05 +0000 (20:13 +0200)
A patch by Cove Schneider <cove_s@yahoo.com> who reports:

I noticed that the RID numbers seem to increase incrementally, then
will suddenly jump by 124501. Unless I'm misunderstanding, shouldn't
RID pool allocations just be 500 at a time?

e.g.  Adding accounts one after another on a single test instance here's how they're incrementing (from 4.0.6):
1596
1597
1598
1599
126100
126101
126102
...
126599

251100
...

251599

376100
...

The problem is that this complicates using sssd's AD integration, as
that it doesn't expect the RIDs to increase in a single domain so
quickly.

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Autobuild-User(master): Stefan Metzmacher <metze@samba.org>
Autobuild-Date(master): Thu Jul  4 20:13:05 CEST 2013 on sn-devel-104

source4/dsdb/samdb/ldb_modules/ridalloc.c

index 73ecb0389199ad9ef9676bef5617ee1b20e4784a..c0859d3fbd07cbd6be919f550247d34528e8d923 100644 (file)
@@ -606,7 +606,8 @@ int ridalloc_allocate_rid(struct ldb_module *module, uint32_t *rid, struct ldb_r
        /*
         * if we are half-exhausted then try to get a new pool.
         */
-       if (nridset.next_rid > (prev_pool_hi + prev_pool_lo)/2) {
+       if (nridset.next_rid > (prev_pool_hi + prev_pool_lo)/2 &&
+           nridset.alloc_pool == nridset.prev_pool) {
                /*
                 * if we are the RID Manager,
                 * we can get a new pool localy.