diff options
Diffstat (limited to 'source3/smbd/fileio.c')
-rw-r--r-- | source3/smbd/fileio.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/source3/smbd/fileio.c b/source3/smbd/fileio.c index 5cc3d4b88b0..caaebf6217b 100644 --- a/source3/smbd/fileio.c +++ b/source3/smbd/fileio.c @@ -294,10 +294,22 @@ ssize_t write_file(struct smb_request *req, 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); + struct smb_filename *smb_fname = NULL; + NTSTATUS status; + + status = create_synthetic_smb_fname_split( + talloc_tos(), fsp->fsp_name, &st, + &smb_fname); + if (!NT_STATUS_IS_OK(status)) { + errno = + map_errno_from_nt_status(status); + return -1; + } + + file_set_dosmode(fsp->conn, smb_fname, + dosmode | aARCH, NULL, false); + st = smb_fname->st; + TALLOC_FREE(smb_fname); } /* |