From 8f1f2f04c796a8659d93bafadefca4a98fee00f0 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 31 Oct 2007 15:45:45 -0700 Subject: Fix some cases where file_set_dosmode was being passed False instead of NULL. Fix more of the notifications to be correct for Samba4 RAW-NOTIFY torture (we had missed one when calling set_ea_dos_attribute(). Jeremy. (This used to be commit 39d265375cf55eedddef2c4faa65398df73d5ed2) --- source3/script/tests/selftest.sh | 2 ++ source3/smbd/dosmode.c | 19 ++++++++++++++----- source3/smbd/fileio.c | 9 +++++++-- source3/smbd/nttrans.c | 2 +- source3/smbd/open.c | 6 ++++-- source3/smbd/reply.c | 2 +- source3/smbd/trans2.c | 2 +- 7 files changed, 30 insertions(+), 12 deletions(-) (limited to 'source3') diff --git a/source3/script/tests/selftest.sh b/source3/script/tests/selftest.sh index 8de6420b10..30355a829d 100755 --- a/source3/script/tests/selftest.sh +++ b/source3/script/tests/selftest.sh @@ -139,6 +139,8 @@ cat >$SERVERCONFFILE<fh->fd, unixmode); unbecome_root(); close_file_fchmod(fsp); - notify_fname(conn, NOTIFY_ACTION_MODIFIED, - FILE_NOTIFY_CHANGE_ATTRIBUTES, fname); + if (!newfile) { + notify_fname(conn, NOTIFY_ACTION_MODIFIED, + FILE_NOTIFY_CHANGE_ATTRIBUTES, fname); + } } return( ret ); diff --git a/source3/smbd/fileio.c b/source3/smbd/fileio.c index 9e296f2204..74f2c6774f 100644 --- a/source3/smbd/fileio.c +++ b/source3/smbd/fileio.c @@ -230,8 +230,13 @@ ssize_t write_file(struct smb_request *req, if (SMB_VFS_FSTAT(fsp,fsp->fh->fd,&st) == 0) { int dosmode = dos_mode(fsp->conn,fsp->fsp_name,&st); - if ((lp_store_dos_attributes(SNUM(fsp->conn)) || MAP_ARCHIVE(fsp->conn)) && !IS_DOS_ARCHIVE(dosmode)) { - file_set_dosmode(fsp->conn,fsp->fsp_name,dosmode | aARCH,&st, False); + if ((lp_store_dos_attributes(SNUM(fsp->conn)) || + MAP_ARCHIVE(fsp->conn)) && + !IS_DOS_ARCHIVE(dosmode)) { + file_set_dosmode(fsp->conn,fsp->fsp_name, + dosmode | aARCH,&st, + NULL, + false); } /* diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index bbbde06619..da926d1bce 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -1971,7 +1971,7 @@ static NTSTATUS copy_internals(TALLOC_CTX *ctx, creates the file. This isn't the correct thing to do in the copy case. JRA */ file_set_dosmode(conn, newname, fattr, &sbuf2, - parent_dirname(newname)); + parent_dirname(newname),false); if (ret < (SMB_OFF_T)sbuf1.st_size) { return NT_STATUS_DISK_FULL; diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 4ed3a70411..53fc1be586 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -1866,7 +1866,8 @@ NTSTATUS open_file_ntcreate(connection_struct *conn, if (!posix_open) { file_set_dosmode(conn, fname, new_dos_attributes | aARCH, NULL, - parent_dir); + parent_dir, + true); } } } @@ -2035,7 +2036,8 @@ static NTSTATUS mkdir_internal(connection_struct *conn, if (!posix_open) { file_set_dosmode(conn, name, file_attributes | aDIR, NULL, - parent_dir); + parent_dir, + true); } } diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 531e71fe73..d2aa6c6929 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -1114,7 +1114,7 @@ void reply_setatr(connection_struct *conn, struct smb_request *req) else mode &= ~aDIR; - if (file_set_dosmode(conn,fname,mode,&sbuf,False) != 0) { + if (file_set_dosmode(conn,fname,mode,&sbuf,NULL,false) != 0) { reply_unixerror(req, ERRDOS, ERRnoaccess); END_PROFILE(SMBsetatr); return; diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index d75f6a29fd..58d44a856b 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -4563,7 +4563,7 @@ static NTSTATUS smb_set_file_dosmode(connection_struct *conn, DEBUG(10,("smb_set_file_dosmode: file %s : setting dos mode 0x%x\n", fname, (unsigned int)dosmode )); - if(file_set_dosmode(conn, fname, dosmode, psbuf, False)) { + if(file_set_dosmode(conn, fname, dosmode, psbuf, NULL, false)) { DEBUG(2,("smb_set_file_dosmode: file_set_dosmode of %s failed (%s)\n", fname, strerror(errno))); return map_nt_error_from_unix(errno); -- cgit