From 8ecee11790c68948a12bdc46f07a05586c8afaf6 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sun, 3 Jun 2012 23:12:22 +1000 Subject: s3-auth: inline make_session_info functions into only callers With the split up to handle system specially, there is no need for these static helper functions any more. Andrew Bartlett Signed-off-by: Andreas Schneider --- source3/auth/auth_util.c | 109 +++++++++++++++-------------------------------- 1 file changed, 35 insertions(+), 74 deletions(-) (limited to 'source3/auth') diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c index 2ac46e6c5f..71fec76758 100644 --- a/source3/auth/auth_util.c +++ b/source3/auth/auth_util.c @@ -934,27 +934,33 @@ done: return status; } -/**************************************************************************** - Fake a auth_session_info just from a username (as a - session_info structure, with create_local_token() already called on - it. -****************************************************************************/ +/*************************************************************************** + Make (and fill) a auth_session_info struct for a system user login. + This *must* succeed for smbd to start. +***************************************************************************/ -static NTSTATUS make_system_session_info_from_pw(TALLOC_CTX *mem_ctx, - struct passwd *pwd, - struct auth_session_info **session_info) +static NTSTATUS make_new_session_info_system(TALLOC_CTX *mem_ctx, + struct auth_session_info **session_info) { + struct passwd *pwd; + NTSTATUS status; + struct auth_serversupplied_info *server_info; const char *domain = lp_netbios_name(); struct netr_SamInfo3 info3; TALLOC_CTX *tmp_ctx; - NTSTATUS status; tmp_ctx = talloc_stackframe(); if (tmp_ctx == NULL) { return NT_STATUS_NO_MEMORY; } + pwd = getpwuid_alloc(tmp_ctx, sec_initial_uid()); + if (pwd == NULL) { + status = NT_STATUS_NO_SUCH_USER; + goto done; + } + ZERO_STRUCT(info3); status = get_system_info3(tmp_ctx, pwd, &info3); @@ -979,72 +985,14 @@ static NTSTATUS make_system_session_info_from_pw(TALLOC_CTX *mem_ctx, /* Now turn the server_info into a session_info with the full token etc */ status = create_local_token(mem_ctx, server_info, NULL, pwd->pw_name, session_info); + talloc_free(server_info); + if (!NT_STATUS_IS_OK(status)) { DEBUG(0, ("create_local_token failed: %s\n", nt_errstr(status))); goto done; } - talloc_free(server_info); - - /* SYSTEM has all privilages */ - (*session_info)->security_token->privilege_mask = ~0; - - talloc_steal(mem_ctx, *session_info); - - status = NT_STATUS_OK; -done: - TALLOC_FREE(tmp_ctx); - return status; -} - -static NTSTATUS make_session_info_from_pw(TALLOC_CTX *mem_ctx, - struct passwd *pwd, - bool is_guest, - struct auth_session_info **session_info) -{ - struct auth_serversupplied_info *result; - NTSTATUS status; - - status = make_server_info_pw(&result, pwd->pw_name, pwd); - - if (!NT_STATUS_IS_OK(status)) { - return status; - } - - result->nss_token = true; - result->guest = is_guest; - - /* Now turn the server_info into a session_info with the full token etc */ - status = create_local_token(mem_ctx, result, NULL, pwd->pw_name, session_info); - talloc_free(result); - return status; -} - -/*************************************************************************** - Make (and fill) a auth_session_info struct for a system user login. - This *must* succeed for smbd to start. -***************************************************************************/ - -static NTSTATUS make_new_session_info_system(TALLOC_CTX *mem_ctx, - struct auth_session_info **session_info) -{ - struct passwd *pwd; - NTSTATUS status; - - pwd = getpwuid_alloc(mem_ctx, sec_initial_uid()); - if (pwd == NULL) { - return NT_STATUS_NO_SUCH_USER; - } - - status = make_system_session_info_from_pw(mem_ctx, - pwd, - session_info); - TALLOC_FREE(pwd); - if (!NT_STATUS_IS_OK(status)) { - return status; - } - TALLOC_FREE((*session_info)->security_token->sids); (*session_info)->security_token->num_sids = 0; @@ -1053,11 +1001,17 @@ static NTSTATUS make_new_session_info_system(TALLOC_CTX *mem_ctx, &(*session_info)->security_token->sids, &(*session_info)->security_token->num_sids); if (!NT_STATUS_IS_OK(status)) { - TALLOC_FREE((*session_info)); - return status; + goto done; } - return NT_STATUS_OK; + /* SYSTEM has all privilages */ + (*session_info)->security_token->privilege_mask = ~0; + + talloc_steal(mem_ctx, *session_info); + +done: + TALLOC_FREE(tmp_ctx); + return status; } /**************************************************************************** @@ -1073,20 +1027,27 @@ NTSTATUS make_session_info_from_username(TALLOC_CTX *mem_ctx, { struct passwd *pwd; NTSTATUS status; + struct auth_serversupplied_info *result; pwd = Get_Pwnam_alloc(talloc_tos(), username); if (pwd == NULL) { return NT_STATUS_NO_SUCH_USER; } - status = make_session_info_from_pw(mem_ctx, pwd, is_guest, session_info); + status = make_server_info_pw(&result, pwd->pw_name, pwd); if (!NT_STATUS_IS_OK(status)) { - TALLOC_FREE(pwd); return status; } + result->nss_token = true; + result->guest = is_guest; + + /* Now turn the server_info into a session_info with the full token etc */ + status = create_local_token(mem_ctx, result, NULL, pwd->pw_name, session_info); + TALLOC_FREE(result); TALLOC_FREE(pwd); + return status; } -- cgit