aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/dir.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/cifs/dir.c')
-rw-r--r--fs/cifs/dir.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
index 634cf330fe04..e962e75e6f7b 100644
--- a/fs/cifs/dir.c
+++ b/fs/cifs/dir.c
@@ -236,12 +236,14 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
236 236
237 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) { 237 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
238 args.uid = (__u64) current->fsuid; 238 args.uid = (__u64) current->fsuid;
239 args.gid = (__u64) current->fsgid; 239 if (inode->i_mode & S_ISGID)
240 args.gid = (__u64) inode->i_gid;
241 else
242 args.gid = (__u64) current->fsgid;
240 } else { 243 } else {
241 args.uid = NO_CHANGE_64; 244 args.uid = NO_CHANGE_64;
242 args.gid = NO_CHANGE_64; 245 args.gid = NO_CHANGE_64;
243 } 246 }
244
245 CIFSSMBUnixSetInfo(xid, pTcon, full_path, &args, 247 CIFSSMBUnixSetInfo(xid, pTcon, full_path, &args,
246 cifs_sb->local_nls, 248 cifs_sb->local_nls,
247 cifs_sb->mnt_cifs_flags & 249 cifs_sb->mnt_cifs_flags &
@@ -270,7 +272,12 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
270 (cifs_sb->mnt_cifs_flags & 272 (cifs_sb->mnt_cifs_flags &
271 CIFS_MOUNT_SET_UID)) { 273 CIFS_MOUNT_SET_UID)) {
272 newinode->i_uid = current->fsuid; 274 newinode->i_uid = current->fsuid;
273 newinode->i_gid = current->fsgid; 275 if (inode->i_mode & S_ISGID)
276 newinode->i_gid =
277 inode->i_gid;
278 else
279 newinode->i_gid =
280 current->fsgid;
274 } 281 }
275 } 282 }
276 } 283 }