summaryrefslogtreecommitdiffstats
path: root/source3/smbd/trans2.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2013-08-21 12:10:05 -0700
committerJeremy Allison <jra@samba.org>2013-08-26 09:01:22 -0700
commitf1ff97fc022adaacaa23b7da250be6f7d51c6ac7 (patch)
treeaf15cbb021981b654a80bd980ea3db6da2090919 /source3/smbd/trans2.c
parentbd0156988b34feaf91c3046f7ec78f0833222395 (diff)
downloadsamba-f1ff97fc022adaacaa23b7da250be6f7d51c6ac7.tar.gz
samba-f1ff97fc022adaacaa23b7da250be6f7d51c6ac7.tar.xz
samba-f1ff97fc022adaacaa23b7da250be6f7d51c6ac7.zip
Allow UNIX extensions client to act on open fsp instead of pathname if available.
Eliminates possible race condition on pathname op. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
Diffstat (limited to 'source3/smbd/trans2.c')
-rw-r--r--source3/smbd/trans2.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index 945fe434d96..3cd21926b18 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -7126,11 +7126,18 @@ static NTSTATUS smb_set_file_unix_basic(connection_struct *conn,
*/
if (raw_unixmode != SMB_MODE_NO_CHANGE) {
+ int ret;
+
DEBUG(10,("smb_set_file_unix_basic: SMB_SET_FILE_UNIX_BASIC "
"setting mode 0%o for file %s\n",
(unsigned int)unixmode,
smb_fname_str_dbg(smb_fname)));
- if (SMB_VFS_CHMOD(conn, smb_fname->base_name, unixmode) != 0) {
+ if (fsp && fsp->fh->fd != -1) {
+ ret = SMB_VFS_FCHMOD(fsp, unixmode);
+ } else {
+ ret = SMB_VFS_CHMOD(conn, smb_fname->base_name, unixmode);
+ }
+ if (ret != 0) {
return map_nt_error_from_unix(errno);
}
}