Fix a handle leak for error returns in ldb_try_load_dso
authorVolker Lendecke <vl@samba.org>
Fri, 13 Jun 2008 14:05:31 +0000 (16:05 +0200)
committerVolker Lendecke <vl@samba.org>
Fri, 13 Jun 2008 14:15:12 +0000 (16:15 +0200)
Coverity ID 464
(cherry picked from commit 496d44d2f21661c85bf07e8eb7cae6298fefd900)
(This used to be commit f30bc6503de6c712101e04fe26c004eeffcd300e)

source3/lib/ldb/common/ldb_modules.c

index 68c4535e4d0283bdfd73a7d74a83ec7b275468c9..d898f3df03edab35d1eba37bb1a0c62f1825fffc 100644 (file)
@@ -206,6 +206,7 @@ int ldb_try_load_dso(struct ldb_context *ldb, const char *name)
        void *handle;
        int (*init_fn) (void);
        char *modulesdir;
+       int ret;
 
 #ifdef HAVE_DLOPEN
        if (getenv("LD_LDB_MODULE_PATH") != NULL) {
@@ -234,12 +235,17 @@ int ldb_try_load_dso(struct ldb_context *ldb, const char *name)
 
        if (init_fn == NULL) {
                ldb_debug(ldb, LDB_DEBUG_ERROR, "no symbol `init_module' found in %s: %s\n", path, dlerror());
+               dlclose(handle);
                return -1;
        }
 
        talloc_free(path);
 
-       return init_fn();
+       ret = init_fn();
+       if (ret == -1) {
+               dlclose(handle);
+       }
+       return ret;
 #else
        ldb_debug(ldb, LDB_DEBUG_TRACE, "no dlopen() - not trying to load %s module\n", name);
        return -1;