HACK session setup wakeup...
authorStefan Metzmacher <metze@samba.org>
Fri, 8 May 2015 09:19:02 +0000 (09:19 +0000)
committerStefan Metzmacher <metze@samba.org>
Mon, 10 Feb 2020 14:19:11 +0000 (15:19 +0100)
source3/smbd/smb2_sesssetup.c

index 4a2a5eefc0f7643c285bee1f5a4c072952783b05..ae82ec6529db7fb14b0f2fcedab88a9bef70c4a5 100644 (file)
@@ -1183,6 +1183,7 @@ struct smbd_smb2_session_setup_wrap_state {
        NTSTATUS error;
 };
 
+static void smbd_smb2_session_setup_wrap_wakeup_done(struct tevent_req *subreq);
 static void smbd_smb2_session_setup_wrap_setup_done(struct tevent_req *subreq);
 static void smbd_smb2_session_setup_wrap_shutdown_done(struct tevent_req *subreq);
 
@@ -1198,6 +1199,7 @@ static struct tevent_req *smbd_smb2_session_setup_wrap_send(TALLOC_CTX *mem_ctx,
        struct tevent_req *req;
        struct smbd_smb2_session_setup_wrap_state *state;
        struct tevent_req *subreq;
+       struct timeval wakeup_time;
 
        req = tevent_req_create(mem_ctx, &state,
                                struct smbd_smb2_session_setup_wrap_state);
@@ -1212,6 +1214,29 @@ static struct tevent_req *smbd_smb2_session_setup_wrap_send(TALLOC_CTX *mem_ctx,
        state->in_previous_session_id = in_previous_session_id;
        state->in_security_buffer = in_security_buffer;
 
+       wakeup_time = timeval_current_ofs_usec(1000000);
+       subreq = tevent_wakeup_send(state, state->ev, wakeup_time);
+       if (tevent_req_nomem(subreq, req)) {
+               return tevent_req_post(req, ev);
+       }
+       tevent_req_set_callback(subreq,
+                               smbd_smb2_session_setup_wrap_wakeup_done, req);
+
+       return req;
+}
+
+static void smbd_smb2_session_setup_wrap_wakeup_done(struct tevent_req *subreq)
+{
+       struct tevent_req *req =
+               tevent_req_callback_data(subreq,
+               struct tevent_req);
+       struct smbd_smb2_session_setup_wrap_state *state =
+               tevent_req_data(req,
+               struct smbd_smb2_session_setup_wrap_state);
+
+       tevent_wakeup_recv(subreq);
+       TALLOC_FREE(subreq);
+
        subreq = smbd_smb2_session_setup_send(state, state->ev,
                                              state->smb2req,
                                              state->in_session_id,
@@ -1220,12 +1245,12 @@ static struct tevent_req *smbd_smb2_session_setup_wrap_send(TALLOC_CTX *mem_ctx,
                                              state->in_previous_session_id,
                                              state->in_security_buffer);
        if (tevent_req_nomem(subreq, req)) {
-               return tevent_req_post(req, ev);
+               return;
        }
        tevent_req_set_callback(subreq,
                                smbd_smb2_session_setup_wrap_setup_done, req);
 
-       return req;
+       return;
 }
 
 static void smbd_smb2_session_setup_wrap_setup_done(struct tevent_req *subreq)