summaryrefslogtreecommitdiff
path: root/source3/lib/username.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2007-12-19 15:02:59 +0100
committerVolker Lendecke <vl@samba.org>2007-12-19 21:09:10 +0100
commite518e19bc0000019f131354f55e9f5b55f6a2c5e (patch)
tree5c8723a1510ebb17ff4bd21068aa67159ad3a68d /source3/lib/username.c
parent042201bcc1b7ffc88cdc22b64c70c653b2433703 (diff)
downloadsamba-e518e19bc0000019f131354f55e9f5b55f6a2c5e.tar.gz
samba-e518e19bc0000019f131354f55e9f5b55f6a2c5e.tar.bz2
samba-e518e19bc0000019f131354f55e9f5b55f6a2c5e.zip
Remove Get_Pwnam and its associated static variable
All callers are replaced by Get_Pwnam_alloc (This used to be commit 735f59315497113aebadcf9ad387e3dbfffa284a)
Diffstat (limited to 'source3/lib/username.c')
-rw-r--r--source3/lib/username.c49
1 files changed, 9 insertions, 40 deletions
diff --git a/source3/lib/username.c b/source3/lib/username.c
index 21eed9f5fc..3087bac0f4 100644
--- a/source3/lib/username.c
+++ b/source3/lib/username.c
@@ -32,19 +32,24 @@ static struct passwd *uname_string_combinations2(char *s, TALLOC_CTX *mem_ctx, i
Get a users home directory.
****************************************************************************/
-char *get_user_home_dir(const char *user)
+char *get_user_home_dir(TALLOC_CTX *mem_ctx, const char *user)
{
- static struct passwd *pass;
+ struct passwd *pass;
+ char *result;
/* Ensure the user exists. */
- pass = Get_Pwnam(user);
+ pass = Get_Pwnam_alloc(mem_ctx, user);
if (!pass)
return(NULL);
+
/* Return home directory from struct passwd. */
- return(pass->pw_dir);
+ result = talloc_move(mem_ctx, &pass->pw_dir);
+
+ TALLOC_FREE(pass);
+ return result;
}
/****************************************************************************
@@ -55,8 +60,6 @@ char *get_user_home_dir(const char *user)
* - using lp_usernamelevel() for permutations.
****************************************************************************/
-static struct passwd *Get_Pwnam_ret = NULL;
-
static struct passwd *Get_Pwnam_internals(TALLOC_CTX *mem_ctx,
const char *user, char *user2)
{
@@ -134,40 +137,6 @@ struct passwd *Get_Pwnam_alloc(TALLOC_CTX *mem_ctx, const char *user)
return ret;
}
-/****************************************************************************
- Get_Pwnam wrapper without modification.
- NOTE: This with NOT modify 'user'!
-****************************************************************************/
-
-struct passwd *Get_Pwnam(const char *user)
-{
- struct passwd *ret;
-
- ret = Get_Pwnam_alloc(NULL, user);
-
- /* This call used to just return the 'passwd' static buffer.
- This could then have accidental reuse implications, so
- we now malloc a copy, and free it in the next use.
-
- This should cause the (ab)user to segfault if it
- uses an old struct.
-
- This is better than useing the wrong data in security
- critical operations.
-
- The real fix is to make the callers free the returned
- malloc'ed data.
- */
-
- if (Get_Pwnam_ret) {
- TALLOC_FREE(Get_Pwnam_ret);
- }
-
- Get_Pwnam_ret = ret;
-
- return ret;
-}
-
/* The functions below have been taken from password.c and slightly modified */
/****************************************************************************
Apply a function to upper/lower case combinations