s3:winbindd: make sure we only call static_init_idmap once
authorStefan Metzmacher <metze@samba.org>
Mon, 31 May 2010 08:57:52 +0000 (10:57 +0200)
committerMichael Adam <obnox@samba.org>
Tue, 1 Jun 2010 08:33:13 +0000 (10:33 +0200)
metze

Signed-off-by: Michael Adam <obnox@samba.org>
source3/winbindd/idmap.c

index 2294f396c4aefec99994288b39f2cc0d29ad448d..4229bf47b7a87eebebf5fa391987dd86a6b92b8e 100644 (file)
 
 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.
@@ -346,9 +361,7 @@ static struct idmap_domain *idmap_init_default_domain(TALLOC_CTX *mem_ctx)
        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,
                                &params)) {
@@ -428,9 +441,7 @@ fail:
 
 static struct idmap_domain *idmap_init_passdb_domain(TALLOC_CTX *mem_ctx)
 {
-       DEBUG(10, ("idmap_init_passdb_domain: calling static_init_idmap\n"));
-
-       static_init_idmap;
+       idmap_init();
 
        if (passdb_idmap_domain != NULL) {
                return passdb_idmap_domain;
@@ -540,7 +551,7 @@ static NTSTATUS idmap_alloc_init(struct idmap_alloc_context **ctx)
        char *modulename, *params;
        NTSTATUS ret = NT_STATUS_NO_MEMORY;;
 
-       static_init_idmap;
+       idmap_init();
 
        if (idmap_alloc_ctx != NULL) {
                *ctx = idmap_alloc_ctx;