diff options
author | Tim Prouty <tprouty@samba.org> | 2009-07-06 14:36:16 -0700 |
---|---|---|
committer | Tim Prouty <tprouty@samba.org> | 2009-07-06 15:38:41 -0700 |
commit | 99bd4fda0cd97eb211549a511a2ff6153c2bde2d (patch) | |
tree | db1e4d3424b6bd1215a341f727ef94c748244454 /source3/smbd/fileio.c | |
parent | 0f6e10886f3f778fe301ee981873f29d295d39c5 (diff) | |
download | samba-99bd4fda0cd97eb211549a511a2ff6153c2bde2d.tar.gz samba-99bd4fda0cd97eb211549a511a2ff6153c2bde2d.tar.xz samba-99bd4fda0cd97eb211549a511a2ff6153c2bde2d.zip |
s3: Plumb smb_filename around SMB_VFS_CHFLAGS
SMB_VFS_CHFLAGS isn't actually getting the smb_filename struct for now
since it only operates on the basefile. This is the strategy for all
path-based operations that will never actually operate on a stream.
By clarifying the meaning of path based operations that don't take an
smb_filename struct, modules that implement streams such as vfs_onefs
no longer need to implement SMB_VFS_CHFLAGS to ensure it's only called
on the base_name.
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); } /* |