mirror of
https://github.com/samba-team/samba.git
synced 2025-01-15 23:24:37 +03:00
Ensure we have WinXP-like semantics for checking TIDs and FIDs.
Jeremy.
This commit is contained in:
parent
48891d2613
commit
52e44dde4e
@ -77,12 +77,15 @@
|
||||
#define OPEN_CONN(conn) ((conn) && (conn)->open)
|
||||
#define IS_IPC(conn) ((conn) && (conn)->ipc)
|
||||
#define IS_PRINT(conn) ((conn) && (conn)->printer)
|
||||
#define FNUM_OK(fsp,c) (OPEN_FSP(fsp) && (c)==(fsp)->conn)
|
||||
#define FNUM_OK(fsp,c) (OPEN_FSP(fsp) && (c)==(fsp)->conn && current_user.vuid==(fsp)->vuid)
|
||||
|
||||
#define CHECK_FSP(fsp,conn) if (!FNUM_OK(fsp,conn)) \
|
||||
#define CHECK_FSP(fsp,conn) do {\
|
||||
extern struct current_user current_user;\
|
||||
if (!FNUM_OK(fsp,conn)) \
|
||||
return(ERROR_DOS(ERRDOS,ERRbadfid)); \
|
||||
else if((fsp)->fd == -1) \
|
||||
return(ERROR_DOS(ERRDOS,ERRbadaccess))
|
||||
return(ERROR_DOS(ERRDOS,ERRbadaccess));\
|
||||
} while(0)
|
||||
|
||||
#define CHECK_READ(fsp) if (!(fsp)->can_read) \
|
||||
return(ERROR_DOS(ERRDOS,ERRbadaccess))
|
||||
|
@ -1464,6 +1464,7 @@ void send_file_readbraw(connection_struct *conn, files_struct *fsp, SMB_OFF_T st
|
||||
|
||||
int reply_readbraw(connection_struct *conn, char *inbuf, char *outbuf, int dum_size, int dum_buffsize)
|
||||
{
|
||||
extern struct current_user current_user;
|
||||
ssize_t maxcount,mincount;
|
||||
size_t nread = 0;
|
||||
SMB_OFF_T startpos;
|
||||
@ -2361,6 +2362,7 @@ int reply_exit(connection_struct *conn,
|
||||
int reply_close(connection_struct *conn, char *inbuf,char *outbuf, int size,
|
||||
int dum_buffsize)
|
||||
{
|
||||
extern struct current_user current_user;
|
||||
int outsize = 0;
|
||||
time_t mtime;
|
||||
int32 eclass = 0, err = 0;
|
||||
@ -2381,7 +2383,7 @@ int reply_close(connection_struct *conn, char *inbuf,char *outbuf, int size,
|
||||
* We can only use CHECK_FSP if we know it's not a directory.
|
||||
*/
|
||||
|
||||
if(!fsp || (fsp->conn != conn)) {
|
||||
if(!fsp || (fsp->conn != conn) || (fsp->vuid != current_user.vuid)) {
|
||||
END_PROFILE(SMBclose);
|
||||
return ERROR_DOS(ERRDOS,ERRbadfid);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user