From: Volker Lendecke Date: Fri, 13 Jun 2008 14:05:31 +0000 (+0200) Subject: Fix a handle leak for error returns in ldb_try_load_dso X-Git-Tag: samba-4.0.0alpha6~801^2~1067 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1bc1b1ac0af4baef266e3f9ea9adb7d8d252cc03;p=thirdparty%2Fsamba.git Fix a handle leak for error returns in ldb_try_load_dso Coverity ID 464 (cherry picked from commit 496d44d2f21661c85bf07e8eb7cae6298fefd900) (This used to be commit f30bc6503de6c712101e04fe26c004eeffcd300e) --- diff --git a/source3/lib/ldb/common/ldb_modules.c b/source3/lib/ldb/common/ldb_modules.c index 68c4535e4d0..d898f3df03e 100644 --- a/source3/lib/ldb/common/ldb_modules.c +++ b/source3/lib/ldb/common/ldb_modules.c @@ -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;