[PATCH 05/27] account_pol: don't leak state_path onto talloc tos

David Disseldorp ddiss at samba.org
Sun Nov 2 12:21:27 MST 2014


Also check for allocation failures.

Signed-off-by: David Disseldorp <ddiss at samba.org>
---
 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 5f2c7ab..6b1066e 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)) {
-- 
1.8.4.5



More information about the samba-technical mailing list