s3:smbd: create a user_struct for compat in SMB2 Session Setup
authorStefan Metzmacher <metze@samba.org>
Wed, 27 May 2009 16:33:45 +0000 (18:33 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 3 Jun 2009 15:54:38 +0000 (17:54 +0200)
metze

source3/smbd/globals.h
source3/smbd/smb2_server.c
source3/smbd/smb2_sesssetup.c

index 5bd75e767ccc26abf2945b9c6f89365e87c7f4e5..cd0cb4d2460fdc386b642a41d4efee5a55f0ce12 100644 (file)
@@ -268,6 +268,8 @@ struct smbd_smb2_session {
        DATA_BLOB session_key;
        bool do_signing;
 
+       user_struct *compat_vuser;
+
        struct {
                /* an id tree used to allocate tids */
                struct idr_context *idtree;
index c32f9b90152f299ccc1b7522a71ff6f8c5b50ec1..2be2828a134d6be9a8129118f978a757c58d0672 100644 (file)
@@ -59,7 +59,7 @@ static NTSTATUS smbd_initialize_smb2(struct smbd_server_connection *conn)
        if (conn->smb2.sessions.idtree == NULL) {
                return NT_STATUS_NO_MEMORY;
        }
-       conn->smb2.sessions.limit = 0x00FFFFFF;
+       conn->smb2.sessions.limit = 0x0000FFFE;
        conn->smb2.sessions.list = NULL;
 
        ret = tstream_bsd_existing_socket(conn, smbd_server_fd(),
index be37aec04d32b107830d74eb1ff4d3d78ed9f8a2..eb88a60420bc33658d633fc07ee703f61d848ecf 100644 (file)
@@ -243,6 +243,18 @@ static NTSTATUS smbd_smb2_session_setup(struct smbd_smb2_request *req,
        }
        session->session_key = session->server_info->user_session_key;
 
+       session->compat_vuser = talloc_zero(session, user_struct);
+       if (session->compat_vuser == NULL) {
+               TALLOC_FREE(session);
+               return NT_STATUS_NO_MEMORY;
+       }
+       session->compat_vuser->auth_ntlmssp_state = session->auth_ntlmssp_state;
+       session->compat_vuser->homes_snum = -1;
+       session->compat_vuser->server_info = session->server_info;
+       session->compat_vuser->session_keystr = NULL;
+       session->compat_vuser->vuid = session->vuid;
+       DLIST_ADD(session->conn->smb1.sessions.validated_users, session->compat_vuser);
+
        session->status = NT_STATUS_OK;
 
        /*
@@ -281,6 +293,10 @@ NTSTATUS smbd_smb2_request_check_session(struct smbd_smb2_request *req)
                return NT_STATUS_ACCESS_DENIED;
        }
 
+       set_current_user_info(session->server_info->sanitized_username,
+                             session->server_info->unix_name,
+                             pdb_get_domain(session->server_info->sam_account));
+
        req->session = session;
        return NT_STATUS_OK;
 }