cifs: on multiuser mount, set ownership to current_fsuid/current_fsgid (try #7)
commit 3aa1c8c290
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>
This commit is contained in:
parent
9daa42e220
commit
1c456013e9
1 changed files with 9 additions and 3 deletions
|
@ -1755,7 +1755,7 @@ int cifs_revalidate_dentry(struct dentry *dentry)
|
||||||
}
|
}
|
||||||
|
|
||||||
int cifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
int cifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||||
struct kstat *stat)
|
struct kstat *stat)
|
||||||
{
|
{
|
||||||
struct cifs_sb_info *cifs_sb = CIFS_SB(dentry->d_sb);
|
struct cifs_sb_info *cifs_sb = CIFS_SB(dentry->d_sb);
|
||||||
struct cifsTconInfo *tcon = cifs_sb_master_tcon(cifs_sb);
|
struct cifsTconInfo *tcon = cifs_sb_master_tcon(cifs_sb);
|
||||||
|
@ -1765,11 +1765,17 @@ int cifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||||
generic_fillattr(dentry->d_inode, stat);
|
generic_fillattr(dentry->d_inode, stat);
|
||||||
stat->blksize = CIFS_MAX_MSGSIZE;
|
stat->blksize = CIFS_MAX_MSGSIZE;
|
||||||
stat->ino = CIFS_I(dentry->d_inode)->uniqueid;
|
stat->ino = CIFS_I(dentry->d_inode)->uniqueid;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If on a multiuser mount without unix extensions, and the
|
||||||
|
* admin hasn't overridden them, set the ownership to the
|
||||||
|
* fsuid/fsgid of the current process.
|
||||||
|
*/
|
||||||
if ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER) &&
|
if ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER) &&
|
||||||
!tcon->unix_ext) {
|
!tcon->unix_ext) {
|
||||||
if (!cifs_sb->mnt_uid)
|
if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_UID))
|
||||||
stat->uid = current_fsuid();
|
stat->uid = current_fsuid();
|
||||||
if (!cifs_sb->mnt_uid)
|
if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID))
|
||||||
stat->gid = current_fsgid();
|
stat->gid = current_fsgid();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue