s3:vfs_xattr_tdb: don't leak state_path() to talloc_tos in xattr_tdb_init().
authorMichael Adam <obnox@samba.org>
Thu, 15 Jan 2009 22:43:00 +0000 (23:43 +0100)
committerMichael Adam <obnox@samba.org>
Fri, 16 Jan 2009 00:02:21 +0000 (01:02 +0100)
Michael

source3/modules/vfs_xattr_tdb.c

index c4806e26c3eeb01b4c8ff7603d21ec8230b7a287..44bfffb94eaf33255e55fbc1b6d7407fa1b83fb3 100644 (file)
@@ -574,15 +574,18 @@ static bool xattr_tdb_init(int snum, struct db_context **p_db)
 {
        struct db_context *db;
        const char *dbname;
+       char *def_dbname;
 
-       dbname = lp_parm_const_string(snum, "xattr_tdb", "file",
-                                     state_path("xattr.tdb"));
-
-       if (dbname == NULL) {
+       def_dbname = state_path("xattr.tdb");
+       if (def_dbname == NULL) {
                errno = ENOSYS;
                return false;
        }
 
+       dbname = lp_parm_const_string(snum, "xattr_tdb", "file", def_dbname);
+
+       /* now we know dbname is not NULL */
+
        become_root();
        db = db_open(NULL, dbname, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
        unbecome_root();
@@ -593,10 +596,12 @@ static bool xattr_tdb_init(int snum, struct db_context **p_db)
 #else
                errno = ENOSYS;
 #endif
+               TALLOC_FREE(def_dbname);
                return false;
        }
 
        *p_db = db;
+       TALLOC_FREE(def_dbname);
        return true;
 }