mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
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 39d265375c
)
This commit is contained in:
parent
695c4a7a74
commit
8f1f2f04c7
@ -139,6 +139,8 @@ cat >$SERVERCONFFILE<<EOF
|
||||
printing = bsd
|
||||
printcap name = /dev/null
|
||||
|
||||
# min receivefile size = 4000
|
||||
|
||||
[tmp]
|
||||
path = $PREFIX_ABS/tmp
|
||||
read only = no
|
||||
|
@ -425,7 +425,8 @@ uint32 dos_mode(connection_struct *conn, const char *path,SMB_STRUCT_STAT *sbuf)
|
||||
|
||||
int file_set_dosmode(connection_struct *conn, const char *fname,
|
||||
uint32 dosmode, SMB_STRUCT_STAT *st,
|
||||
const char *parent_dir)
|
||||
const char *parent_dir,
|
||||
bool newfile)
|
||||
{
|
||||
SMB_STRUCT_STAT st1;
|
||||
int mask=0;
|
||||
@ -455,6 +456,10 @@ int file_set_dosmode(connection_struct *conn, const char *fname,
|
||||
|
||||
/* Store the DOS attributes in an EA by preference. */
|
||||
if (set_ea_dos_attribute(conn, fname, st, dosmode)) {
|
||||
if (!newfile) {
|
||||
notify_fname(conn, NOTIFY_ACTION_MODIFIED,
|
||||
FILE_NOTIFY_CHANGE_ATTRIBUTES, fname);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -491,8 +496,10 @@ int file_set_dosmode(connection_struct *conn, const char *fname,
|
||||
}
|
||||
|
||||
if ((ret = SMB_VFS_CHMOD(conn,fname,unixmode)) == 0) {
|
||||
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 0;
|
||||
}
|
||||
|
||||
@ -523,8 +530,10 @@ int file_set_dosmode(connection_struct *conn, const char *fname,
|
||||
ret = SMB_VFS_FCHMOD(fsp, fsp->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 );
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user