From: Ralph Boehme Date: Mon, 6 Jan 2020 09:14:11 +0000 (+0100) Subject: smbd: RIP user_struct X-Git-Tag: ldb-2.1.0~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a18ffe26b3be13e45622172c4ade258cfc8fa783;p=thirdparty%2Fsamba.git smbd: RIP user_struct At last, the nail in the coffin. :) Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Mon Jan 13 21:09:01 UTC 2020 on sn-devel-184 --- diff --git a/source3/librpc/idl/smbXsrv.idl b/source3/librpc/idl/smbXsrv.idl index 9fdfc97db0e..c6ce9c48789 100644 --- a/source3/librpc/idl/smbXsrv.idl +++ b/source3/librpc/idl/smbXsrv.idl @@ -290,7 +290,6 @@ interface smbXsrv hyper nonce_high_max; hyper nonce_high; hyper nonce_low; - [ignore] user_struct *compat; [ignore] smbXsrv_tcon_table *tcon_table; [ignore] uint32 homes_snum; smbXsrv_session_auth0 *pending_auth; diff --git a/source3/smbd/files.c b/source3/smbd/files.c index 7966a788656..99b2f343685 100644 --- a/source3/smbd/files.c +++ b/source3/smbd/files.c @@ -661,10 +661,6 @@ struct files_struct *file_fsp_get(struct smbd_smb2_request *smb2req, return NULL; } - if (smb2req->session->compat == NULL) { - return NULL; - } - if (smb2req->session->global->session_wire_id != fsp->vuid) { return NULL; } diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h index 72edd28b68c..7b26d04ed0f 100644 --- a/source3/smbd/globals.h +++ b/source3/smbd/globals.h @@ -840,19 +840,10 @@ struct smbd_smb2_request { }; struct smbd_server_connection; -struct user_struct; struct pending_message_list; struct pending_auth_data; -struct user_struct { - struct user_struct *next, *prev; - - struct auth_session_info *session_info; - - struct smbXsrv_session *session; -}; - struct pthreadpool_tevent; struct smbd_server_connection { @@ -866,7 +857,6 @@ struct smbd_server_connection { int trans_num; size_t num_users; - struct user_struct *users; size_t num_connections; struct connection_struct *connections; diff --git a/source3/smbd/password.c b/source3/smbd/password.c index 4b14e6f12f1..9709a51a109 100644 --- a/source3/smbd/password.c +++ b/source3/smbd/password.c @@ -26,49 +26,15 @@ #include "auth.h" #include "../libcli/security/security.h" -/**************************************************************************** - Check if a uid has been validated, and return an pointer to the user_struct - if it has. NULL if not. vuid is biased by an offset. This allows us to - tell random client vuid's (normally zero) from valid vuids. -****************************************************************************/ - -struct user_struct *get_valid_user_struct(struct smbd_server_connection *sconn, - uint64_t vuid) -{ - struct user_struct *usp; - int count=0; - - if (vuid == UID_FIELD_INVALID) - return NULL; - - usp=sconn->users; - for (;usp;usp=usp->next,count++) { - if (vuid == usp->session->global->session_wire_id) { - if (count > 10) { - DLIST_PROMOTE(sconn->users, usp); - } - return usp; - } - } - - return NULL; -} - /**************************************************************************** Invalidate a uid. ****************************************************************************/ void invalidate_vuid(struct smbd_server_connection *sconn, uint64_t vuid) { - struct user_struct *vuser = NULL; struct smbXsrv_session *session = NULL; NTSTATUS status; - vuser = get_valid_user_struct(sconn, vuid); - if (vuser == NULL) { - return; - } - status = get_valid_smbXsrv_session(sconn->client, vuid, &session); if (!NT_STATUS_IS_OK(status)) { return; @@ -76,15 +42,12 @@ void invalidate_vuid(struct smbd_server_connection *sconn, uint64_t vuid) session_yield(session); - DLIST_REMOVE(sconn->users, vuser); SMB_ASSERT(sconn->num_users > 0); sconn->num_users--; /* clear the vuid from the 'cache' on each connection, and from the vuid 'owner' of connections */ conn_clear_vuid_caches(sconn, vuid); - - TALLOC_FREE(vuser); } int register_homes_share(const char *username) diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index a8e2393f264..4b1960b0c14 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -754,8 +754,6 @@ struct kernel_oplocks *linux_init_kernel_oplocks(struct smbd_server_connection * /* The following definitions come from smbd/password.c */ -struct user_struct *get_valid_user_struct(struct smbd_server_connection *sconn, - uint64_t vuid); void invalidate_vuid(struct smbd_server_connection *sconn, uint64_t vuid); int register_homes_share(const char *username); diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index 94d1ac1e047..8efed438a52 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -302,16 +302,6 @@ static void reply_sesssetup_and_X_spnego(struct smb_request *req) data_blob_clear_free(&session_info->session_key); } - session->compat = talloc_zero(session, struct user_struct); - if (session->compat == NULL) { - data_blob_free(&out_blob); - TALLOC_FREE(session); - reply_nterror(req, NT_STATUS_NO_MEMORY); - return; - } - session->compat->session = session; - session->compat->session_info = session_info; - DLIST_ADD(sconn->users, session->compat); sconn->num_users++; if (security_session_user_level(session_info, NULL) >= SECURITY_USER) { @@ -412,8 +402,6 @@ static void reply_sesssetup_and_X_spnego(struct smb_request *req) talloc_steal(session_info, session_info->session_key.data); TALLOC_FREE(session->global->auth_session_info); - session->compat->session_info = session_info; - if (security_session_user_level(session_info, NULL) >= SECURITY_USER) { session->homes_snum = register_homes_share(session_info->unix_info->unix_name); @@ -1059,16 +1047,6 @@ void reply_sesssetup_and_X(struct smb_request *req) } } - session->compat = talloc_zero(session, struct user_struct); - if (session->compat == NULL) { - TALLOC_FREE(session); - reply_nterror(req, NT_STATUS_NO_MEMORY); - END_PROFILE(SMBsesssetupX); - return; - } - session->compat->session = session; - session->compat->session_info = session_info; - DLIST_ADD(sconn->users, session->compat); sconn->num_users++; if (security_session_user_level(session_info, NULL) >= SECURITY_USER) { diff --git a/source3/smbd/smb2_sesssetup.c b/source3/smbd/smb2_sesssetup.c index e7e9df031f6..3fa1a15910e 100644 --- a/source3/smbd/smb2_sesssetup.c +++ b/source3/smbd/smb2_sesssetup.c @@ -525,13 +525,6 @@ static NTSTATUS smbd_smb2_auth_generic_return(struct smbXsrv_session *session, } talloc_keep_secret(session_info->session_key.data); - session->compat = talloc_zero(session, struct user_struct); - if (session->compat == NULL) { - return NT_STATUS_NO_MEMORY; - } - session->compat->session = session; - session->compat->session_info = session_info; - DLIST_ADD(smb2req->sconn->users, session->compat); smb2req->sconn->num_users++; if (security_session_user_level(session_info, NULL) >= SECURITY_USER) { @@ -614,8 +607,6 @@ static NTSTATUS smbd_smb2_reauth_generic_return(struct smbXsrv_session *session, } talloc_keep_secret(session_info->session_key.data); - session->compat->session_info = session_info; - session->homes_snum = register_homes_share(session_info->unix_info->unix_name); diff --git a/source3/smbd/smbXsrv_session.c b/source3/smbd/smbXsrv_session.c index 77c285d741b..ba542702213 100644 --- a/source3/smbd/smbXsrv_session.c +++ b/source3/smbd/smbXsrv_session.c @@ -1685,7 +1685,6 @@ NTSTATUS smbXsrv_session_logoff(struct smbXsrv_session *session) } invalidate_vuid(sconn, session->global->session_wire_id); - session->compat = NULL; global_rec = session->global->db_rec; session->global->db_rec = NULL;