2021-03-16 10:49:09 +09:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright ( C ) 2018 Samsung Electronics Co . , Ltd .
*/
# ifndef __USER_SESSION_MANAGEMENT_H__
# define __USER_SESSION_MANAGEMENT_H__
# include <linux/hashtable.h>
2021-04-01 17:45:33 +09:00
# include <linux/xarray.h>
2021-03-16 10:49:09 +09:00
# include "../smb_common.h"
# include "../ntlmssp.h"
2021-06-01 13:18:44 +09:00
# define CIFDS_SESSION_FLAG_SMB2 BIT(1)
2021-03-16 10:49:09 +09:00
# define PREAUTH_HASHVALUE_SIZE 64
struct ksmbd_file_table ;
struct channel {
__u8 smb3signingkey [ SMB3_SIGN_KEY_SIZE ] ;
struct ksmbd_conn * conn ;
struct list_head chann_list ;
} ;
struct preauth_session {
__u8 Preauth_HashValue [ PREAUTH_HASHVALUE_SIZE ] ;
2021-06-18 10:04:19 +09:00
u64 id ;
struct list_head preauth_entry ;
2021-03-16 10:49:09 +09:00
} ;
struct ksmbd_session {
2021-03-30 14:25:35 +09:00
u64 id ;
2021-03-16 10:49:09 +09:00
2022-07-25 13:36:52 +09:00
__u16 dialect ;
char ClientGUID [ SMB2_CLIENT_GUID_SIZE ] ;
2021-03-16 10:49:09 +09:00
struct ksmbd_user * user ;
unsigned int sequence_number ;
unsigned int flags ;
bool sign ;
bool enc ;
bool is_anonymous ;
int state ;
__u8 * Preauth_HashValue ;
char sess_key [ CIFS_KEY_SIZE ] ;
struct hlist_node hlist ;
2022-07-22 10:15:57 +09:00
rwlock_t chann_lock ;
2021-03-16 10:49:09 +09:00
struct list_head ksmbd_chann_list ;
2021-04-01 17:45:33 +09:00
struct xarray tree_conns ;
2021-04-13 13:06:30 +09:00
struct ida tree_conn_ida ;
2021-03-16 10:49:09 +09:00
struct list_head rpc_handle_list ;
2021-05-06 11:43:37 +09:00
__u8 smb3encryptionkey [ SMB3_ENC_DEC_KEY_SIZE ] ;
__u8 smb3decryptionkey [ SMB3_ENC_DEC_KEY_SIZE ] ;
2021-03-16 10:49:09 +09:00
__u8 smb3signingkey [ SMB3_SIGN_KEY_SIZE ] ;
struct ksmbd_file_table file_table ;
} ;
static inline int test_session_flag ( struct ksmbd_session * sess , int bit )
{
return sess - > flags & bit ;
}
static inline void set_session_flag ( struct ksmbd_session * sess , int bit )
{
sess - > flags | = bit ;
}
static inline void clear_session_flag ( struct ksmbd_session * sess , int bit )
{
sess - > flags & = ~ bit ;
}
struct ksmbd_session * ksmbd_smb2_session_create ( void ) ;
void ksmbd_session_destroy ( struct ksmbd_session * sess ) ;
struct ksmbd_session * ksmbd_session_lookup_slowpath ( unsigned long long id ) ;
struct ksmbd_session * ksmbd_session_lookup ( struct ksmbd_conn * conn ,
unsigned long long id ) ;
2022-07-22 10:15:10 +09:00
int ksmbd_session_register ( struct ksmbd_conn * conn ,
struct ksmbd_session * sess ) ;
2021-03-16 10:49:09 +09:00
void ksmbd_sessions_deregister ( struct ksmbd_conn * conn ) ;
2021-06-18 10:04:19 +09:00
struct ksmbd_session * ksmbd_session_lookup_all ( struct ksmbd_conn * conn ,
unsigned long long id ) ;
struct preauth_session * ksmbd_preauth_session_alloc ( struct ksmbd_conn * conn ,
u64 sess_id ) ;
struct preauth_session * ksmbd_preauth_session_lookup ( struct ksmbd_conn * conn ,
unsigned long long id ) ;
2021-03-16 10:49:09 +09:00
int ksmbd_acquire_tree_conn_id ( struct ksmbd_session * sess ) ;
void ksmbd_release_tree_conn_id ( struct ksmbd_session * sess , int id ) ;
int ksmbd_session_rpc_open ( struct ksmbd_session * sess , char * rpc_name ) ;
void ksmbd_session_rpc_close ( struct ksmbd_session * sess , int id ) ;
int ksmbd_session_rpc_method ( struct ksmbd_session * sess , int id ) ;
# endif /* __USER_SESSION_MANAGEMENT_H__ */