auto-init for utility functions
authorSimo Sorce <idra@samba.org>
Wed, 30 Apr 2003 00:44:45 +0000 (00:44 +0000)
committerSimo Sorce <idra@samba.org>
Wed, 30 Apr 2003 00:44:45 +0000 (00:44 +0000)
source/sam/idmap.c

index e3747d07004745900063d4a9aa0ffcf66004ecff..e0634681de1691a3a82330426029b79e241d1b26 100644 (file)
@@ -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();
 }