From 5871d3da871349cba058bb91218ae58107cf05c8 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Sat, 2 May 2015 16:29:03 +0200 Subject: [PATCH] s3:smb2_sesssetup: remove unused smbd_smb2_session_setup_* destructors The cleanup of a failing session setup is now handled in smbd_smb2_session_setup_wrap_*(). Bug: https://bugzilla.samba.org/show_bug.cgi?id=11182 Signed-off-by: Stefan Metzmacher Reviewed-by: Jeremy Allison --- source3/smbd/smb2_sesssetup.c | 98 ----------------------------------- 1 file changed, 98 deletions(-) diff --git a/source3/smbd/smb2_sesssetup.c b/source3/smbd/smb2_sesssetup.c index 5ddaa48276b..c56e4803a7b 100644 --- a/source3/smbd/smb2_sesssetup.c +++ b/source3/smbd/smb2_sesssetup.c @@ -448,94 +448,12 @@ struct smbd_smb2_session_setup_state { uint16_t out_session_flags; DATA_BLOB out_security_buffer; uint64_t out_session_id; - /* The following pointer is owned by state->session. */ - struct smbd_smb2_session_setup_state **pp_self_ref; }; -static int pp_self_ref_destructor(struct smbd_smb2_session_setup_state **pp_state) -{ - (*pp_state)->session = NULL; - /* - * To make things clearer, ensure the pp_self_ref - * pointer is nulled out. We're never going to - * access this again. - */ - (*pp_state)->pp_self_ref = NULL; - return 0; -} - -static int smbd_smb2_session_setup_state_destructor(struct smbd_smb2_session_setup_state *state) -{ - struct smbXsrv_connection *xconn; - struct smbd_smb2_request *preq; - - /* - * If state->session is not NULL, - * we move the session from the session table to the request on failure - * so that the error response can be correctly signed, but the session - * is then really deleted when the request is done. - */ - - if (state->session == NULL) { - return 0; - } - - state->session->status = NT_STATUS_USER_SESSION_DELETED; - state->smb2req->session = talloc_move(state->smb2req, &state->session); - - /* - * We own the session now - we don't need the - * tag talloced on session that keeps track of session independently. - */ - TALLOC_FREE(state->pp_self_ref); - - /* - * We've made this session owned by the current request. - * Ensure that any outstanding requests don't also refer - * to it. - */ - xconn = state->smb2req->xconn; - - for (preq = xconn->smb2.requests; preq != NULL; preq = preq->next) { - if (preq == state->smb2req) { - continue; - } - if (preq->session == state->smb2req->session) { - preq->session = NULL; - /* - * If we no longer have a session we can't - * sign or encrypt replies. - */ - preq->do_signing = false; - preq->do_encryption = false; - } - } - - return 0; -} - static void smbd_smb2_session_setup_gensec_done(struct tevent_req *subreq); static void smbd_smb2_session_setup_previous_done(struct tevent_req *subreq); static void smbd_smb2_session_setup_auth_return(struct tevent_req *req); -/************************************************************************ - We have to tag the state->session pointer with memory talloc'ed - on it to ensure it gets NULL'ed out if the underlying struct smbXsrv_session - is deleted by shutdown whilst this request is in flight. -************************************************************************/ - -static NTSTATUS tag_state_session_ptr(struct smbd_smb2_session_setup_state *state) -{ - state->pp_self_ref = talloc_zero(state->session, - struct smbd_smb2_session_setup_state *); - if (state->pp_self_ref == NULL) { - return NT_STATUS_NO_MEMORY; - } - *state->pp_self_ref = state; - talloc_set_destructor(state->pp_self_ref, pp_self_ref_destructor); - return NT_STATUS_OK; -} - static struct tevent_req *smbd_smb2_session_setup_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, struct smbd_smb2_request *smb2req, @@ -577,8 +495,6 @@ static struct tevent_req *smbd_smb2_session_setup_send(TALLOC_CTX *mem_ctx, return tevent_req_post(req, ev); } - talloc_set_destructor(state, smbd_smb2_session_setup_state_destructor); - if (state->in_session_id == 0) { /* create a new session */ status = smbXsrv_session_create(state->smb2req->xconn, @@ -609,11 +525,6 @@ static struct tevent_req *smbd_smb2_session_setup_send(TALLOC_CTX *mem_ctx, } } - status = tag_state_session_ptr(state); - if (tevent_req_nterror(req, status)) { - return tevent_req_post(req, ev); - } - if (state->session->gensec == NULL) { status = auth_generic_prepare(state->session, state->smb2req->xconn->remote_address, @@ -668,9 +579,6 @@ static void smbd_smb2_session_setup_gensec_done(struct tevent_req *subreq) if (NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) { state->out_session_id = state->session->global->session_wire_id; - /* we want to keep the session */ - state->session = NULL; - TALLOC_FREE(state->pp_self_ref); tevent_req_nterror(req, status); return; } @@ -735,9 +643,6 @@ static void smbd_smb2_session_setup_auth_return(struct tevent_req *req) if (tevent_req_nterror(req, status)) { return; } - /* we want to keep the session */ - state->session = NULL; - TALLOC_FREE(state->pp_self_ref); tevent_req_done(req); return; } @@ -752,9 +657,6 @@ static void smbd_smb2_session_setup_auth_return(struct tevent_req *req) return; } - /* we want to keep the session */ - state->session = NULL; - TALLOC_FREE(state->pp_self_ref); tevent_req_done(req); return; }