static_decl_idmap;
+static void idmap_init(void)
+{
+ static bool initialized;
+
+ if (initialized) {
+ return;
+ }
+
+ DEBUG(10, ("idmap_init(): calling static_init_idmap\n"));
+
+ static_init_idmap;
+
+ initialized = true;
+}
+
/**
* Pointer to the backend methods. Modules register themselves here via
* smb_register_idmap.
char *modulename;
char *params;
- DEBUG(10, ("idmap_init_default_domain: calling static_init_idmap\n"));
-
- static_init_idmap;
+ idmap_init();
if (!parse_idmap_module(talloc_tos(), lp_idmap_backend(), &modulename,
¶ms)) {
static struct idmap_domain *idmap_init_passdb_domain(TALLOC_CTX *mem_ctx)
{
+ idmap_init();
+
if (passdb_idmap_domain != NULL) {
return passdb_idmap_domain;
}
char *modulename, *params;
NTSTATUS ret = NT_STATUS_NO_MEMORY;;
+ idmap_init();
+
if (idmap_alloc_ctx != NULL) {
*ctx = idmap_alloc_ctx;
return NT_STATUS_OK;
return ctx->methods->allocate_id(id);
}
-NTSTATUS idmap_set_uid_hwm(struct unixid *id)
-{
- struct idmap_alloc_context *ctx;
- NTSTATUS ret;
-
- if (!NT_STATUS_IS_OK(ret = idmap_alloc_init(&ctx))) {
- return ret;
- }
-
- id->type = ID_TYPE_UID;
- return ctx->methods->set_id_hwm(id);
-}
-
NTSTATUS idmap_set_gid_hwm(struct unixid *id)
{
struct idmap_alloc_context *ctx;
dom = idmap_init_passdb_domain(NULL);
if ((dom != NULL)
- && NT_STATUS_IS_OK(dom->methods->unixids_to_sids(dom, maps))) {
+ && NT_STATUS_IS_OK(dom->methods->unixids_to_sids(dom, maps))
+ && id->status == ID_MAPPED) {
return NT_STATUS_OK;
}
struct idmap_domain *dom;
struct id_map *maps[2];
- DEBUG(10, ("idmap_backend_sid_to_unixid: domain = '%s', sid = [%s]\n",
+ DEBUG(10, ("idmap_backends_sid_to_unixid: domain = '%s', sid = [%s]\n",
domain?domain:"NULL", sid_string_dbg(id->sid)));
maps[0] = id;