summaryrefslogtreecommitdiff
path: root/source3/smbd/fileio.c
diff options
context:
space:
mode:
authorTim Prouty <tprouty@samba.org>2009-07-06 14:36:16 -0700
committerTim Prouty <tprouty@samba.org>2009-07-06 15:38:41 -0700
commit99bd4fda0cd97eb211549a511a2ff6153c2bde2d (patch)
treedb1e4d3424b6bd1215a341f727ef94c748244454 /source3/smbd/fileio.c
parent0f6e10886f3f778fe301ee981873f29d295d39c5 (diff)
downloadsamba-99bd4fda0cd97eb211549a511a2ff6153c2bde2d.tar.gz
samba-99bd4fda0cd97eb211549a511a2ff6153c2bde2d.tar.bz2
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.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/source3/smbd/fileio.c b/source3/smbd/fileio.c
index 5cc3d4b88b..caaebf6217 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);
}
/*