diff options
Diffstat (limited to 'source3/sam')
-rw-r--r-- | source3/sam/idmap.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/source3/sam/idmap.c b/source3/sam/idmap.c index e3747d0700..e0634681de 100644 --- a/source3/sam/idmap.c +++ b/source3/sam/idmap.c @@ -38,6 +38,16 @@ static struct { static struct idmap_methods *local_map; static struct idmap_methods *remote_map; +static void lazy_initialize_idmap(void) +{ + static BOOL initialized = False; + if (initialized) return; + idmap_init(); + initialized = True; +} + + + static struct idmap_methods *get_methods(const char *name) { int i = 0; @@ -90,6 +100,8 @@ NTSTATUS idmap_set_mapping(const DOM_SID *sid, unid_t id, int id_type) { NTSTATUS ret; + lazy_initialize_idmap(); + if (!lp_idmap_only()) { if (id_type & ID_USERID) { uid_t low, high; @@ -145,6 +157,8 @@ NTSTATUS idmap_get_id_from_sid(unid_t *id, int *id_type, const DOM_SID *sid) NTSTATUS ret; int loc_type; + lazy_initialize_idmap(); + loc_type = *id_type; if (remote_map) { /* We have a central remote idmap */ loc_type |= ID_NOMAP; @@ -174,6 +188,8 @@ NTSTATUS idmap_get_sid_from_id(DOM_SID *sid, unid_t id, int id_type) NTSTATUS ret; int loc_type; + lazy_initialize_idmap(); + loc_type = id_type; if (remote_map) { loc_type = id_type | ID_NOMAP; @@ -218,6 +234,8 @@ NTSTATUS idmap_close(void) /* Dump backend status */ void idmap_status(void) { + lazy_initialize_idmap(); + local_map->status(); if (remote_map) remote_map->status(); } |