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;
return NULL;
}
- if (smb2req->session->compat == NULL) {
- return NULL;
- }
-
if (smb2req->session->global->session_wire_id != fsp->vuid) {
return NULL;
}
};
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 {
int trans_num;
size_t num_users;
- struct user_struct *users;
size_t num_connections;
struct connection_struct *connections;
#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;
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)
/* 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);
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) {
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);
}
}
- 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) {
}
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) {
}
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);
}
invalidate_vuid(sconn, session->global->session_wire_id);
- session->compat = NULL;
global_rec = session->global->db_rec;
session->global->db_rec = NULL;