The branch, master has been updated via e7f7ed8bf6281ef01aca53ea44acdd4af4c51aa7 (commit) via f14e4d4e54f424c05147cb0e635c9b8930270262 (commit) from c2f7f1b40b20e20fbc111fba59adc49a35f4fda0 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit e7f7ed8bf6281ef01aca53ea44acdd4af4c51aa7 Author: Stefan Metzmacher <me...@samba.org> Date: Wed Feb 11 11:47:41 2009 +0100 s3:auth: only create_local_token() should add S-1-22-X-Y sids metze commit f14e4d4e54f424c05147cb0e635c9b8930270262 Author: Stefan Metzmacher <me...@samba.org> Date: Wed Feb 11 11:46:18 2009 +0100 s3:auth: add S-1-22-X-Y sids to the local token metze ----------------------------------------------------------------------- Summary of changes: source3/auth/auth_util.c | 65 +++++++++++++++++++++++++++------------------- 1 files changed, 38 insertions(+), 27 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c index 892e5c4..1f00e22 100644 --- a/source3/auth/auth_util.c +++ b/source3/auth/auth_util.c @@ -572,9 +572,6 @@ NTSTATUS make_server_info_sam(auth_serversupplied_info **server_info, struct passwd *pwd; gid_t *gids; auth_serversupplied_info *result; - int i; - size_t num_gids; - DOM_SID unix_group_sid; const char *username = pdb_get_username(sampass); NTSTATUS status; @@ -646,30 +643,6 @@ NTSTATUS make_server_info_sam(auth_serversupplied_info **server_info, } } - /* Add the "Unix Group" SID for each gid to catch mapped groups - and their Unix equivalent. This is to solve the backwards - compatibility problem of 'valid users = +ntadmin' where - ntadmin has been paired with "Domain Admins" in the group - mapping table. Otherwise smb.conf would need to be changed - to 'valid user = "Domain Admins"'. --jerry */ - - num_gids = result->num_sids; - for ( i=0; i<num_gids; i++ ) { - if ( !gid_to_unix_groups_sid( gids[i], &unix_group_sid ) ) { - DEBUG(1,("make_server_info_sam: Failed to create SID " - "for gid %d!\n", gids[i])); - continue; - } - status = add_sid_to_array_unique(result, &unix_group_sid, - &result->sids, - &result->num_sids); - if (!NT_STATUS_IS_OK(status)) { - result->sam_account = NULL; /* Don't free on error exit. */ - TALLOC_FREE(result); - return status; - } - } - /* For now we throw away the gids and convert via sid_to_gid * later. This needs fixing, but I'd like to get the code straight and * simple first. */ @@ -736,6 +709,7 @@ NTSTATUS create_local_token(auth_serversupplied_info *server_info) { NTSTATUS status; size_t i; + struct dom_sid tmp_sid; /* * If winbind is not around, we can not make much use of the SIDs the @@ -788,7 +762,44 @@ NTSTATUS create_local_token(auth_serversupplied_info *server_info) &server_info->utok.ngroups); } + /* + * Add the "Unix Group" SID for each gid to catch mapped groups + * and their Unix equivalent. This is to solve the backwards + * compatibility problem of 'valid users = +ntadmin' where + * ntadmin has been paired with "Domain Admins" in the group + * mapping table. Otherwise smb.conf would need to be changed + * to 'valid user = "Domain Admins"'. --jerry + * + * For consistency we also add the "Unix User" SID, + * so that the complete unix token is represented within + * the nt token. + */ + + if (!uid_to_unix_users_sid(server_info->utok.uid, &tmp_sid)) { + DEBUG(1,("create_local_token: Failed to create SID " + "for uid %d!\n", server_info->utok.uid)); + } + add_sid_to_array_unique(server_info->ptok, &tmp_sid, + &server_info->ptok->user_sids, + &server_info->ptok->num_sids); + + for ( i=0; i<server_info->utok.ngroups; i++ ) { + if (!gid_to_unix_groups_sid( server_info->utok.groups[i], &tmp_sid ) ) { + DEBUG(1,("create_local_token: Failed to create SID " + "for gid %d!\n", server_info->utok.groups[i])); + continue; + } + add_sid_to_array_unique(server_info->ptok, &tmp_sid, + &server_info->ptok->user_sids, + &server_info->ptok->num_sids); + } + debug_nt_user_token(DBGC_AUTH, 10, server_info->ptok); + debug_unix_user_token(DBGC_AUTH, 10, + server_info->utok.uid, + server_info->utok.gid, + server_info->utok.ngroups, + server_info->utok.groups); status = log_nt_token(server_info->ptok); return status; -- Samba Shared Repository