[PATCH 01/27] groupdb: don't leak state_path onto talloc tos

David Disseldorp ddiss at samba.org
Sun Nov 2 12:21:23 MST 2014


Also check for allocation failures.

Signed-off-by: David Disseldorp <ddiss at samba.org>
---
 source3/groupdb/mapping_tdb.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/source3/groupdb/mapping_tdb.c b/source3/groupdb/mapping_tdb.c
index cc397d9..ab79b68 100644
--- a/source3/groupdb/mapping_tdb.c
+++ b/source3/groupdb/mapping_tdb.c
@@ -46,24 +46,35 @@ static bool mapping_switch(const char *ldb_path);
 ****************************************************************************/
 static bool init_group_mapping(void)
 {
-	const char *ldb_path;
+	char *tdb_path;
+	char *ldb_path;
 
 	if (db != NULL) {
 		return true;
 	}
 
-	db = db_open(NULL, state_path("group_mapping.tdb"), 0,
+	tdb_path = state_path("group_mapping.tdb");
+	if (tdb_path == NULL) {
+		return false;
+	}
+	db = db_open(NULL, tdb_path, 0,
 		     TDB_DEFAULT, O_RDWR|O_CREAT, 0600,
 		     DBWRAP_LOCK_ORDER_1, DBWRAP_FLAG_NONE);
 	if (db == NULL) {
 		DEBUG(0, ("Failed to open group mapping database: %s\n",
 			  strerror(errno)));
+		talloc_free(tdb_path);
 		return false;
 	}
 
 	ldb_path = state_path("group_mapping.ldb");
+	if (ldb_path == NULL) {
+		return false;
+	}
 	if (file_exist(ldb_path) && !mapping_switch(ldb_path)) {
-		unlink(state_path("group_mapping.tdb"));
+		unlink(tdb_path);
+		talloc_free(tdb_path);
+		talloc_free(ldb_path);
 		return false;
 
 	} else {
@@ -114,6 +125,8 @@ static bool init_group_mapping(void)
 		}
 #endif
 	}
+	talloc_free(tdb_path);
+	talloc_free(ldb_path);
 	return true;
 }
 
-- 
1.8.4.5



More information about the samba-technical mailing list