mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
Implement SMBexit properly. Found by Samba4 tester. You must do a make
clean proto all; after this commit. Jeremy.
This commit is contained in:
parent
8a5c97fa07
commit
27af1f9fea
@ -392,6 +392,7 @@ typedef struct files_struct
|
||||
SMB_BIG_UINT initial_allocation_size; /* Faked up initial allocation on disk. */
|
||||
SMB_BIG_UINT position_information;
|
||||
mode_t mode;
|
||||
uint16 file_pid;
|
||||
uint16 vuid;
|
||||
write_bmpx_struct *wbmpx_ptr;
|
||||
write_cache *wcp;
|
||||
|
@ -142,6 +142,22 @@ void file_close_conn(connection_struct *conn)
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Close all open files for a pid.
|
||||
****************************************************************************/
|
||||
|
||||
void file_close_pid(uint16 smbpid)
|
||||
{
|
||||
files_struct *fsp, *next;
|
||||
|
||||
for (fsp=Files;fsp;fsp=next) {
|
||||
next = fsp->next;
|
||||
if (fsp->file_pid == smbpid) {
|
||||
close_file(fsp,False);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Initialise file structures.
|
||||
****************************************************************************/
|
||||
|
@ -23,6 +23,7 @@
|
||||
|
||||
extern userdom_struct current_user_info;
|
||||
extern uint16 global_oplock_port;
|
||||
extern uint16 global_smbpid;
|
||||
extern BOOL global_client_failed_oplock_break;
|
||||
|
||||
/****************************************************************************
|
||||
@ -226,6 +227,7 @@ static BOOL open_file(files_struct *fsp,connection_struct *conn,
|
||||
fsp->inode = psbuf->st_ino;
|
||||
fsp->dev = psbuf->st_dev;
|
||||
fsp->vuid = current_user.vuid;
|
||||
fsp->file_pid = global_smbpid;
|
||||
fsp->size = psbuf->st_size;
|
||||
fsp->can_lock = True;
|
||||
fsp->can_read = ((flags & O_WRONLY)==0);
|
||||
@ -1361,6 +1363,7 @@ files_struct *open_directory(connection_struct *conn, char *fname, SMB_STRUCT_ST
|
||||
fsp->dev = psbuf->st_dev;
|
||||
fsp->size = psbuf->st_size;
|
||||
fsp->vuid = current_user.vuid;
|
||||
fsp->file_pid = global_smbpid;
|
||||
fsp->can_lock = True;
|
||||
fsp->can_read = False;
|
||||
fsp->can_write = False;
|
||||
@ -1423,6 +1426,7 @@ files_struct *open_file_stat(connection_struct *conn, char *fname, SMB_STRUCT_ST
|
||||
fsp->dev = (SMB_DEV_T)0;
|
||||
fsp->size = psbuf->st_size;
|
||||
fsp->vuid = current_user.vuid;
|
||||
fsp->file_pid = global_smbpid;
|
||||
fsp->can_lock = False;
|
||||
fsp->can_read = False;
|
||||
fsp->can_write = False;
|
||||
|
@ -2394,6 +2394,9 @@ int reply_exit(connection_struct *conn,
|
||||
{
|
||||
int outsize;
|
||||
START_PROFILE(SMBexit);
|
||||
|
||||
file_close_pid(SVAL(inbuf,smb_pid));
|
||||
|
||||
outsize = set_message(outbuf,0,0,True);
|
||||
|
||||
DEBUG(3,("exit\n"));
|
||||
|
Loading…
Reference in New Issue
Block a user