summaryrefslogtreecommitdiff
path: root/source3/winbindd/idmap_autorid_tdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/winbindd/idmap_autorid_tdb.c')
-rw-r--r--source3/winbindd/idmap_autorid_tdb.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/source3/winbindd/idmap_autorid_tdb.c b/source3/winbindd/idmap_autorid_tdb.c
index 95fb048095..daeb1c3758 100644
--- a/source3/winbindd/idmap_autorid_tdb.c
+++ b/source3/winbindd/idmap_autorid_tdb.c
@@ -32,6 +32,7 @@ static NTSTATUS idmap_autorid_get_domainrange_action(struct db_context *db,
uint32_t rangenum, hwm;
char *numstr;
struct autorid_range_config *range;
+ struct autorid_global_config *globalcfg;
range = (struct autorid_range_config *)private_data;
@@ -56,12 +57,19 @@ static NTSTATUS idmap_autorid_get_domainrange_action(struct db_context *db,
goto error;
}
+ ret = idmap_autorid_loadconfig(db, talloc_tos(), &globalcfg);
+ if (!NT_STATUS_IS_OK(ret)) {
+ return ret;
+ }
+
/* do we have a range left? */
- if (hwm >= range->globalcfg->maxranges) {
+ if (hwm >= globalcfg->maxranges) {
DEBUG(1, ("No more domain ranges available!\n"));
+ talloc_free(globalcfg);
ret = NT_STATUS_NO_MEMORY;
goto error;
}
+ TALLOC_FREE(globalcfg);
/* increase the HWM */
ret = dbwrap_change_uint32_atomic_bystring(db, HWM, &rangenum, 1);
@@ -112,6 +120,7 @@ NTSTATUS idmap_autorid_get_domainrange(struct db_context *db,
bool read_only)
{
NTSTATUS ret;
+ struct autorid_global_config *globalcfg;
/*
* try to find mapping without locking the database,
@@ -136,14 +145,19 @@ NTSTATUS idmap_autorid_get_domainrange(struct db_context *db,
idmap_autorid_get_domainrange_action, range);
}
- range->low_id = range->globalcfg->minvalue
- + range->rangenum * range->globalcfg->rangesize;
+ ret = idmap_autorid_loadconfig(db, talloc_tos(), &globalcfg);
+ if (!NT_STATUS_IS_OK(ret)) {
+ return ret;
+ }
+ range->low_id = globalcfg->minvalue
+ + range->rangenum * globalcfg->rangesize;
DEBUG(10, ("Using range #%d for domain %s "
"(domain_range_index=%"PRIu32", low_id=%"PRIu32")\n",
range->rangenum, range->domsid, range->domain_range_index,
range->low_id));
+ TALLOC_FREE(globalcfg);
return ret;
}