From a6d06c069734cae037105350982545b6a964bbd8 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 18 Aug 2011 14:11:45 -0700 Subject: Fix bug #8370 - vfs_chown_fsp broken -- returns in the wrong directory Ensure we always use vfs_ChDir() to keep the singleton cache coherent. Autobuild-User: Jeremy Allison Autobuild-Date: Fri Aug 19 00:43:05 CEST 2011 on sn-devel-104 --- source3/smbd/vfs.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'source3/smbd/vfs.c') diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index ed5009885b..c6edef282f 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -1501,7 +1501,7 @@ NTSTATUS vfs_chown_fsp(files_struct *fsp, uid_t uid, gid_t gid) } /* cd into the parent dir to pin it. */ - ret = SMB_VFS_CHDIR(fsp->conn, parent_dir); + ret = vfs_ChDir(fsp->conn, parent_dir); if (ret == -1) { return map_nt_error_from_unix(errno); } @@ -1512,12 +1512,14 @@ NTSTATUS vfs_chown_fsp(files_struct *fsp, uid_t uid, gid_t gid) /* Must use lstat here. */ ret = SMB_VFS_LSTAT(fsp->conn, &local_fname); if (ret == -1) { - return map_nt_error_from_unix(errno); + status = map_nt_error_from_unix(errno); + goto out; } /* Ensure it matches the fsp stat. */ if (!check_same_stat(&local_fname.st, &fsp->fsp_name->st)) { - return NT_STATUS_ACCESS_DENIED; + status = NT_STATUS_ACCESS_DENIED; + goto out; } path = final_component; } else { @@ -1540,6 +1542,8 @@ NTSTATUS vfs_chown_fsp(files_struct *fsp, uid_t uid, gid_t gid) status = map_nt_error_from_unix(errno); } + out: + if (as_root) { vfs_ChDir(fsp->conn,saved_dir); TALLOC_FREE(saved_dir); -- cgit