diff options
author | Jeremy Allison <jra@samba.org> | 2003-08-19 01:53:45 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2003-08-19 01:53:45 +0000 |
commit | 6d6401a67a9985c8c51175db520114dc2ef421ce (patch) | |
tree | 9392728e28dbd5afee4a72d44e23ed1cdffb68c4 /source3 | |
parent | c0236e8ae32af5480b14ac57677dc983e786d3d5 (diff) | |
download | samba-6d6401a67a9985c8c51175db520114dc2ef421ce.tar.gz samba-6d6401a67a9985c8c51175db520114dc2ef421ce.tar.bz2 samba-6d6401a67a9985c8c51175db520114dc2ef421ce.zip |
Implement SMBexit properly. Found by Samba4 tester. You must do a make
clean proto all; after this commit.
Jeremy.
(This used to be commit 27af1f9feab12542dc538bfceac4593e644ba3b4)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/smb.h | 1 | ||||
-rw-r--r-- | source3/smbd/files.c | 16 | ||||
-rw-r--r-- | source3/smbd/open.c | 4 | ||||
-rw-r--r-- | source3/smbd/reply.c | 3 |
4 files changed, 24 insertions, 0 deletions
diff --git a/source3/include/smb.h b/source3/include/smb.h index 2cafd1b9b1..61cda9465c 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -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; diff --git a/source3/smbd/files.c b/source3/smbd/files.c index 186fa96d7d..1fe6f250e5 100644 --- a/source3/smbd/files.c +++ b/source3/smbd/files.c @@ -143,6 +143,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. ****************************************************************************/ diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 06f1ddfcf2..71af23aaf9 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -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; diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 9577375475..5f2dd91232 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -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")); |