s3:smbd: initialize session->global before calling session_claim
authorGregor Beck <gbeck@sernet.de>
Mon, 27 Aug 2012 09:03:25 +0000 (11:03 +0200)
committerMichael Adam <obnox@samba.org>
Fri, 19 Oct 2012 10:14:59 +0000 (12:14 +0200)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Michael Adam <obnox@samba.org>
source3/smbd/sesssetup.c
source3/smbd/smb2_sesssetup.c

index cd7928de505e3abf4747b86d9eb3e8a62a74ae90..aad122cbc5a0d36da79c164f5b2871953a6c55e6 100644 (file)
@@ -326,15 +326,6 @@ static void reply_sesssetup_and_X_spnego(struct smb_request *req)
                                register_homes_share(session_info->unix_info->unix_name);
                }
 
-               if (!session_claim(session)) {
-                       DEBUG(1, ("smb1: Failed to claim session for vuid=%llu\n",
-                                 (unsigned long long)session->compat->vuid));
-                       data_blob_free(&out_blob);
-                       TALLOC_FREE(session);
-                       reply_nterror(req, NT_STATUS_LOGON_FAILURE);
-                       return;
-               }
-
                if (srv_is_signing_negotiated(sconn) &&
                    action == 0 &&
                    session->global->signing_key.length > 0)
@@ -366,6 +357,15 @@ static void reply_sesssetup_and_X_spnego(struct smb_request *req)
                                GENSEC_EXPIRE_TIME_INFINITY;
                }
 
+               if (!session_claim(session)) {
+                       DEBUG(1, ("smb1: Failed to claim session for vuid=%llu\n",
+                                 (unsigned long long)session->compat->vuid));
+                       data_blob_free(&out_blob);
+                       TALLOC_FREE(session);
+                       reply_nterror(req, NT_STATUS_LOGON_FAILURE);
+                       return;
+               }
+
                status = smbXsrv_session_update(session);
                if (!NT_STATUS_IS_OK(status)) {
                        DEBUG(0, ("smb1: Failed to update session for vuid=%llu - %s\n",
@@ -1008,17 +1008,6 @@ void reply_sesssetup_and_X(struct smb_request *req)
                        register_homes_share(session_info->unix_info->unix_name);
        }
 
-       if (!session_claim(session)) {
-               DEBUG(1, ("smb1: Failed to claim session for vuid=%llu\n",
-                         (unsigned long long)session->compat->vuid));
-               data_blob_free(&nt_resp);
-               data_blob_free(&lm_resp);
-               TALLOC_FREE(session);
-               reply_nterror(req, NT_STATUS_LOGON_FAILURE);
-               END_PROFILE(SMBsesssetupX);
-               return;
-       }
-
        if (srv_is_signing_negotiated(sconn) &&
            action == 0 &&
            session->global->signing_key.length > 0)
@@ -1057,6 +1046,17 @@ void reply_sesssetup_and_X(struct smb_request *req)
                return;
        }
 
+       if (!session_claim(session)) {
+               DEBUG(1, ("smb1: Failed to claim session for vuid=%llu\n",
+                         (unsigned long long)session->compat->vuid));
+               data_blob_free(&nt_resp);
+               data_blob_free(&lm_resp);
+               TALLOC_FREE(session);
+               reply_nterror(req, NT_STATUS_LOGON_FAILURE);
+               END_PROFILE(SMBsesssetupX);
+               return;
+       }
+
        /* current_user_info is changed on new vuid */
        reload_services(sconn, conn_snum_used, true);
 
index 171021a25897a33e7dcd5ea7819c40e469476350..265f8020215805a50f83525a570da6470ab2e40b 100644 (file)
@@ -330,13 +330,6 @@ static NTSTATUS smbd_smb2_auth_generic_return(struct smbXsrv_session *session,
                        register_homes_share(session_info->unix_info->unix_name);
        }
 
-       if (!session_claim(session)) {
-               DEBUG(1, ("smb2: Failed to claim session "
-                       "for vuid=%llu\n",
-                       (unsigned long long)session->compat->vuid));
-               return NT_STATUS_LOGON_FAILURE;
-       }
-
        set_current_user_info(session_info->unix_info->sanitized_username,
                              session_info->unix_info->unix_name,
                              session_info->info->domain_name);
@@ -350,6 +343,13 @@ static NTSTATUS smbd_smb2_auth_generic_return(struct smbXsrv_session *session,
                session->global->auth_session_info_seqnum;
        session->global->expiration_time = gensec_expire_time(session->gensec);
 
+       if (!session_claim(session)) {
+               DEBUG(1, ("smb2: Failed to claim session "
+                       "for vuid=%llu\n",
+                       (unsigned long long)session->compat->vuid));
+               return NT_STATUS_LOGON_FAILURE;
+       }
+
        status = smbXsrv_session_update(session);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(0, ("smb2: Failed to update session for vuid=%llu - %s\n",