groupdb: don't leak state_path onto talloc tos
[samba.git] / 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;
 }