aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/inode.c
diff options
context:
space:
mode:
authorJeff Layton <jlayton@redhat.com>2010-10-12 11:32:42 -0400
committerSteve French <sfrench@us.ibm.com>2010-10-12 11:43:53 -0400
commit1c456013e96f10915578dc61095d19b4906f64ac (patch)
tree3343310e8c431227bdc5ff343585913ed2bfde0b /fs/cifs/inode.c
parent9daa42e22030f0c5c357a5e1f8af658411beda6b (diff)
cifs: on multiuser mount, set ownership to current_fsuid/current_fsgid (try #7)
commit 3aa1c8c2900065a51268430ab48a1b42fdfe5b45 made cifs_getattr set the ownership of files to current_fsuid/current_fsgid when multiuser mounts were in use and when mnt_uid/mnt_gid were non-zero. It should have instead based that decision on the CIFS_MOUNT_OVERR_UID/GID flags. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs/inode.c')
-rw-r--r--fs/cifs/inode.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
index f629159be4e0..94979309698a 100644
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -1755,7 +1755,7 @@ check_inval:
1755} 1755}
1756 1756
1757int cifs_getattr(struct vfsmount *mnt, struct dentry *dentry, 1757int cifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
1758 struct kstat *stat) 1758 struct kstat *stat)
1759{ 1759{
1760 struct cifs_sb_info *cifs_sb = CIFS_SB(dentry->d_sb); 1760 struct cifs_sb_info *cifs_sb = CIFS_SB(dentry->d_sb);
1761 struct cifsTconInfo *tcon = cifs_sb_master_tcon(cifs_sb); 1761 struct cifsTconInfo *tcon = cifs_sb_master_tcon(cifs_sb);
@@ -1765,11 +1765,17 @@ int cifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
1765 generic_fillattr(dentry->d_inode, stat); 1765 generic_fillattr(dentry->d_inode, stat);
1766 stat->blksize = CIFS_MAX_MSGSIZE; 1766 stat->blksize = CIFS_MAX_MSGSIZE;
1767 stat->ino = CIFS_I(dentry->d_inode)->uniqueid; 1767 stat->ino = CIFS_I(dentry->d_inode)->uniqueid;
1768
1769 /*
1770 * If on a multiuser mount without unix extensions, and the
1771 * admin hasn't overridden them, set the ownership to the
1772 * fsuid/fsgid of the current process.
1773 */
1768 if ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER) && 1774 if ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER) &&
1769 !tcon->unix_ext) { 1775 !tcon->unix_ext) {
1770 if (!cifs_sb->mnt_uid) 1776 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_UID))
1771 stat->uid = current_fsuid(); 1777 stat->uid = current_fsuid();
1772 if (!cifs_sb->mnt_uid) 1778 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID))
1773 stat->gid = current_fsgid(); 1779 stat->gid = current_fsgid();
1774 } 1780 }
1775 } 1781 }