diff options
-rw-r--r-- | source3/auth/auth_ntlmssp.c | 24 | ||||
-rw-r--r-- | source3/include/proto.h | 6 | ||||
-rw-r--r-- | source3/rpc_server/srv_pipe.c | 2 | ||||
-rw-r--r-- | source3/smbd/sesssetup.c | 3 | ||||
-rw-r--r-- | source3/smbd/smb2_sesssetup.c | 2 |
5 files changed, 20 insertions, 17 deletions
diff --git a/source3/auth/auth_ntlmssp.c b/source3/auth/auth_ntlmssp.c index a71c02b14f..efeca5c403 100644 --- a/source3/auth/auth_ntlmssp.c +++ b/source3/auth/auth_ntlmssp.c @@ -83,23 +83,25 @@ void auth_ntlmssp_want_seal(struct auth_ntlmssp_state *auth_ntlmssp_state) } -NTSTATUS auth_ntlmssp_server_info(TALLOC_CTX *mem_ctx, - struct auth_ntlmssp_state *auth_ntlmssp_state, - struct auth_serversupplied_info **_server_info) +NTSTATUS auth_ntlmssp_steal_server_info(TALLOC_CTX *mem_ctx, + struct auth_ntlmssp_state *auth_ntlmssp_state, + struct auth_serversupplied_info **server_info) { - struct auth_serversupplied_info *server_info = auth_ntlmssp_state->server_info; - data_blob_free(&server_info->user_session_key); - server_info->user_session_key = + /* Free the current server_info user_session_key and reset it from the + * current ntlmssp_state session_key */ + data_blob_free(&auth_ntlmssp_state->server_info->user_session_key); + auth_ntlmssp_state->server_info->user_session_key = data_blob_talloc( - server_info, + auth_ntlmssp_state->server_info, auth_ntlmssp_state->ntlmssp_state->session_key.data, auth_ntlmssp_state->ntlmssp_state->session_key.length); - if (auth_ntlmssp_state->ntlmssp_state->session_key.length && !server_info->user_session_key.data) { - *_server_info = NULL; + if (auth_ntlmssp_state->ntlmssp_state->session_key.length && + !auth_ntlmssp_state->server_info->user_session_key.data) { + *server_info = NULL; return NT_STATUS_NO_MEMORY; } - auth_ntlmssp_state->server_info = NULL; - *_server_info = talloc_steal(mem_ctx, server_info); + /* Steal server_info away from auth_ntlmssp_state */ + *server_info = talloc_move(mem_ctx, &auth_ntlmssp_state->server_info); return NT_STATUS_OK; } diff --git a/source3/include/proto.h b/source3/include/proto.h index a85f7b5434..7c7611d672 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -54,9 +54,9 @@ NTSTATUS auth_netlogond_init(void); /* The following definitions come from auth/auth_ntlmssp.c */ -NTSTATUS auth_ntlmssp_server_info(TALLOC_CTX *mem_ctx, - struct auth_ntlmssp_state *auth_ntlmssp_state, - struct auth_serversupplied_info **_server_info); +NTSTATUS auth_ntlmssp_steal_server_info(TALLOC_CTX *mem_ctx, + struct auth_ntlmssp_state *auth_ntlmssp_state, + struct auth_serversupplied_info **server_info); struct ntlmssp_state *auth_ntlmssp_get_ntlmssp_state(struct auth_ntlmssp_state *auth_ntlmssp_state); const char *auth_ntlmssp_get_username(struct auth_ntlmssp_state *auth_ntlmssp_state); const char *auth_ntlmssp_get_domain(struct auth_ntlmssp_state *auth_ntlmssp_state); diff --git a/source3/rpc_server/srv_pipe.c b/source3/rpc_server/srv_pipe.c index 2a995b318b..6211d3b87e 100644 --- a/source3/rpc_server/srv_pipe.c +++ b/source3/rpc_server/srv_pipe.c @@ -502,7 +502,7 @@ static bool pipe_ntlmssp_verify_final(pipes_struct *p, DATA_BLOB *p_resp_blob) TALLOC_FREE(p->server_info); - status = auth_ntlmssp_server_info(p, a, &p->server_info); + status = auth_ntlmssp_steal_server_info(p, a, &p->server_info); if (!NT_STATUS_IS_OK(status)) { DEBUG(0, ("auth_ntlmssp_server_info failed to obtain the server info for authenticated user: %s\n", nt_errstr(status))); diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index 08119b2be1..8ff8e08a46 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -640,7 +640,8 @@ static void reply_spnego_ntlmssp(struct smb_request *req, struct smbd_server_connection *sconn = req->sconn; if (NT_STATUS_IS_OK(nt_status)) { - nt_status = auth_ntlmssp_server_info(talloc_tos(), (*auth_ntlmssp_state), &server_info); + nt_status = auth_ntlmssp_steal_server_info(talloc_tos(), + (*auth_ntlmssp_state), &server_info); } else { /* Note that this server_info won't have a session * key. But for map to guest, that's exactly the right diff --git a/source3/smbd/smb2_sesssetup.c b/source3/smbd/smb2_sesssetup.c index 4d0f03259b..a6adf8a66f 100644 --- a/source3/smbd/smb2_sesssetup.c +++ b/source3/smbd/smb2_sesssetup.c @@ -147,7 +147,7 @@ static NTSTATUS setup_ntlmssp_server_info(struct smbd_smb2_session *session, NTSTATUS status) { if (NT_STATUS_IS_OK(status)) { - status = auth_ntlmssp_server_info(session, + status = auth_ntlmssp_steal_server_info(session, session->auth_ntlmssp_state, &session->server_info); } else { |