Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46bbc25f authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

cifs: Override unmappable incoming uids and gids



The cifs protocol has a 64bit space for uids and gids, while linux
only supports a 32bit space today.  Instead of silently truncating
64bit cifs ids, replace cifs ids that do not fit in the 32bit linux
id space with the default uid and gids for the cifs mount.

Cc: Steve French <smfrench@gmail.com>
Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
parent c9617a44
Loading
Loading
Loading
Loading
+13 −9
Original line number Original line Diff line number Diff line
@@ -244,15 +244,19 @@ cifs_unix_basic_to_fattr(struct cifs_fattr *fattr, FILE_UNIX_BASIC_INFO *info,
		break;
		break;
	}
	}


	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_UID)
	fattr->cf_uid = cifs_sb->mnt_uid;
	fattr->cf_uid = cifs_sb->mnt_uid;
	else
	if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_UID)) {
		fattr->cf_uid = le64_to_cpu(info->Uid);
		u64 id = le64_to_cpu(info->Uid);
		if (id < ((uid_t)-1))
			fattr->cf_uid = id;
	}
	
	
	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID)
	fattr->cf_gid = cifs_sb->mnt_gid;
	fattr->cf_gid = cifs_sb->mnt_gid;
	else
	if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID)) {
		fattr->cf_gid = le64_to_cpu(info->Gid);
		u64 id = le64_to_cpu(info->Gid);
		if (id < ((gid_t)-1))
			fattr->cf_gid = id;
	}


	fattr->cf_nlink = le64_to_cpu(info->Nlinks);
	fattr->cf_nlink = le64_to_cpu(info->Nlinks);
}
}