From f88535e56e23e27492851c0fc6e9a86cfdaab041 Mon Sep 17 00:00:00 2001 From: David Disseldorp Date: Sun, 2 Nov 2014 20:21:27 +0100 Subject: [PATCH] account_pol: don't leak state_path onto talloc tos Also check for allocation failures. Signed-off-by: David Disseldorp Reviewed-by: Jeremy Allison --- source3/passdb/account_pol.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/source3/passdb/account_pol.c b/source3/passdb/account_pol.c index 5f2c7ab2eb6..6b1066ee5d3 100644 --- a/source3/passdb/account_pol.c +++ b/source3/passdb/account_pol.c @@ -214,24 +214,32 @@ bool init_account_policy(void) uint32_t version = 0; int i; NTSTATUS status; + char *db_path; if (db != NULL) { return True; } - db = db_open(NULL, state_path("account_policy.tdb"), 0, TDB_DEFAULT, + db_path = state_path("account_policy.tdb"); + if (db_path == NULL) { + return false; + } + + db = db_open(NULL, db_path, 0, TDB_DEFAULT, O_RDWR, 0600, DBWRAP_LOCK_ORDER_1, DBWRAP_FLAG_NONE); if (db == NULL) { /* the account policies files does not exist or open * failed, try to create a new one */ - db = db_open(NULL, state_path("account_policy.tdb"), 0, + db = db_open(NULL, db_path, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600, DBWRAP_LOCK_ORDER_1, DBWRAP_FLAG_NONE); if (db == NULL) { DEBUG(0,("Failed to open account policy database\n")); + TALLOC_FREE(db_path); return False; } } + TALLOC_FREE(db_path); status = dbwrap_fetch_uint32_bystring(db, vstring, &version); if (!NT_STATUS_IS_OK(status)) { -- 2.11.4.GIT