diff options
author | Jeff Layton <jlayton@redhat.com> | 2010-10-12 11:32:42 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2010-10-12 11:43:53 -0400 |
commit | 1c456013e96f10915578dc61095d19b4906f64ac (patch) | |
tree | 3343310e8c431227bdc5ff343585913ed2bfde0b | |
parent | 9daa42e22030f0c5c357a5e1f8af658411beda6b (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>
-rw-r--r-- | fs/cifs/inode.c | 12 |
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 | ||
1757 | int cifs_getattr(struct vfsmount *mnt, struct dentry *dentry, | 1757 | int 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 | } |