struct unixid *xid) {
NTSTATUS ret;
- struct idmap_tdb_common_context *commoncfg;
- struct autorid_global_config *globalcfg;
struct autorid_range_config range;
- commoncfg =
- talloc_get_type_abort(dom->private_data,
- struct idmap_tdb_common_context);
-
- globalcfg = talloc_get_type(commoncfg->private_data,
- struct autorid_global_config);
-
if (dom->read_only) {
DEBUG(3, ("Backend is read-only, refusing "
"new allocation request\n"));
ZERO_STRUCT(range);
- range.globalcfg = globalcfg;
fstrcpy(range.domsid, ALLOC_RANGE);
ret = idmap_autorid_get_domainrange(autorid_db, &range, dom->read_only);
}
TALLOC_FREE(domain);
- range.globalcfg = global;
sid_to_fstring(range.domsid, &domainsid);
/* Calculate domain_range_index for multi-range support */
uint32_t rangenum, hwm;
char *numstr;
struct autorid_range_config *range;
+ struct autorid_global_config *globalcfg;
range = (struct autorid_range_config *)private_data;
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);
bool read_only)
{
NTSTATUS ret;
+ struct autorid_global_config *globalcfg;
/*
* try to find mapping without locking the database,
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;
}