groupdb: don't leak state_path onto talloc tos
authorDavid Disseldorp <ddiss@samba.org>
Sun, 2 Nov 2014 19:21:23 +0000 (20:21 +0100)
committerJeremy Allison <jra@samba.org>
Mon, 3 Nov 2014 22:46:04 +0000 (23:46 +0100)
Also check for allocation failures.

Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/groupdb/mapping_tdb.c

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