diff options
Diffstat (limited to 'source/smbd/sec_ctx.c')
-rw-r--r-- | source/smbd/sec_ctx.c | 60 |
1 files changed, 55 insertions, 5 deletions
diff --git a/source/smbd/sec_ctx.c b/source/smbd/sec_ctx.c index 411ece52495..c93ca5c4389 100644 --- a/source/smbd/sec_ctx.c +++ b/source/smbd/sec_ctx.c @@ -1,5 +1,6 @@ /* - Unix SMB/CIFS implementation. + Unix SMB/Netbios implementation. + Version 1.9. uid/user handling Copyright (C) Tim Potter 2000 @@ -168,7 +169,7 @@ int get_current_groups(gid_t gid, int *p_ngroups, gid_t **p_groups) (*p_ngroups) = ngroups; (*p_groups) = groups; - DEBUG( 3, ( "get_current_groups: user is in %u groups: ", ngroups)); + DEBUG( 3, ( "get_current_groups: user is in %u groups: ", ngroups ) ); for (i = 0; i < ngroups; i++ ) { DEBUG( 3, ( "%s%d", (i ? ", " : ""), (int)groups[i] ) ); } @@ -183,6 +184,46 @@ fail: } /**************************************************************************** + Delete a SID token. +****************************************************************************/ + +void delete_nt_token(NT_USER_TOKEN **pptoken) +{ + if (*pptoken) { + NT_USER_TOKEN *ptoken = *pptoken; + SAFE_FREE( ptoken->user_sids ); + ZERO_STRUCTP(ptoken); + } + SAFE_FREE(*pptoken); +} + +/**************************************************************************** + Duplicate a SID token. +****************************************************************************/ + +NT_USER_TOKEN *dup_nt_token(NT_USER_TOKEN *ptoken) +{ + NT_USER_TOKEN *token; + + if (!ptoken) + return NULL; + + if ((token = (NT_USER_TOKEN *)malloc( sizeof(NT_USER_TOKEN) ) ) == NULL) + return NULL; + + ZERO_STRUCTP(token); + + if ((token->user_sids = (DOM_SID *)memdup( ptoken->user_sids, sizeof(DOM_SID) * ptoken->num_sids )) == NULL) { + SAFE_FREE(token); + return NULL; + } + + token->num_sids = ptoken->num_sids; + + return token; +} + +/**************************************************************************** Initialize the groups a user belongs to. ****************************************************************************/ @@ -199,7 +240,7 @@ BOOL initialise_groups(char *user, uid_t uid, gid_t gid) /* Call initgroups() to get user groups */ - if (initgroups(user,gid) == -1) { + if (winbind_initgroups(user,gid) == -1) { DEBUG(0,("Unable to initgroups. Error was %s\n", strerror(errno) )); if (getuid() == 0) { if (gid < 0 || gid > 32767 || uid < 0 || uid > 32767) { @@ -287,8 +328,17 @@ void set_sec_ctx(uid_t uid, gid_t gid, int ngroups, gid_t *groups, NT_USER_TOKEN DEBUG(3, ("setting sec ctx (%u, %u) - sec_ctx_stack_ndx = %d\n", (unsigned int)uid, (unsigned int)gid, sec_ctx_stack_ndx)); - debug_nt_user_token(DBGC_CLASS, 5, token); - debug_unix_user_token(DBGC_CLASS, 5, uid, gid, ngroups, groups); + if (ngroups) { + int i; + + DEBUG(3, ("%d user groups: \n", ngroups)); + for (i = 0; i < ngroups; i++) { + DEBUGADD(3, ("%u ", (unsigned int)groups[i])); + } + + DEBUG(3, ("\n")); + } + gain_root(); |