diff options
author | David Disseldorp <ddiss@samba.org> | 2014-11-02 20:21:27 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2014-11-03 23:46:04 +0100 |
commit | f88535e56e23e27492851c0fc6e9a86cfdaab041 (patch) | |
tree | d2c895ed1ca902c84d08568d66e14a5cfe83f347 | |
parent | 30ab958f500050f49dfb9c47a3d20f901ceed52e (diff) | |
download | samba-f88535e56e23e27492851c0fc6e9a86cfdaab041.tar.gz samba-f88535e56e23e27492851c0fc6e9a86cfdaab041.tar.xz samba-f88535e56e23e27492851c0fc6e9a86cfdaab041.zip |
account_pol: don't leak state_path onto talloc tos
Also check for allocation failures.
Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
-rw-r--r-- | source3/passdb/account_pol.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/source3/passdb/account_pol.c b/source3/passdb/account_pol.c index 5f2c7ab2eb..6b1066ee5d 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)) { |