From 90e97a033fa8e0747079e2e069bbe53cdeac5094 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 3 Feb 2022 13:20:11 +0100 Subject: [PATCH] smbd: Safeguards for getpwuid Attempt to fix BUG: https://bugzilla.samba.org/show_bug.cgi?id=14900 Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison (cherry picked from commit 929ccd3d1afb864ea715fa4d3d8af8f997e5d2aa) --- source3/passdb/pdb_interface.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c index 3c4499a4459..b83cef1de37 100644 --- a/source3/passdb/pdb_interface.c +++ b/source3/passdb/pdb_interface.c @@ -1402,6 +1402,7 @@ static bool pdb_default_uid_to_sid(struct pdb_methods *methods, uid_t uid, { struct samu *sampw = NULL; struct passwd *unix_pw; + fstring pw_name = { 0 }; bool ret; unix_pw = getpwuid( uid ); @@ -1412,14 +1413,23 @@ static bool pdb_default_uid_to_sid(struct pdb_methods *methods, uid_t uid, return False; } + if (unix_pw->pw_name == NULL) { + DBG_DEBUG("No pw_name for uid %d\n", (int)uid); + return false; + } + + /* + * Make a copy, "unix_pw" might go away soon. + */ + fstrcpy(pw_name, unix_pw->pw_name); + if ( !(sampw = samu_new( NULL )) ) { DEBUG(0,("pdb_default_uid_to_sid: samu_new() failed!\n")); return False; } become_root(); - ret = NT_STATUS_IS_OK( - methods->getsampwnam(methods, sampw, unix_pw->pw_name )); + ret = NT_STATUS_IS_OK(methods->getsampwnam(methods, sampw, pw_name)); unbecome_root(); if (!ret) { -- 2.30.2