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)
committerKarolin Seeger <kseeger@samba.org>
Mon, 15 Jul 2013 18:58:18 +0000 (20:58 +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
(cherry picked from commit 2763cad409430c183f7f1f6f57bc6b38ae616ed9)

Fix bug #10014 - Excessive RID allocation.

source4/dsdb/samdb/ldb_modules/ridalloc.c

index d0266eda8aa8845f8039e153963797ce48e67d6f..3b4f73db4cd8b3b82b1bf53f7fc42ed0a5b338c1 100644 (file)
@@ -605,7 +605,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.