[CIFS] Use fsuid (fsgid) more consistently instead of uid/gid in
assembling smb requests when setuids and Linux protocol extensions enabled and in checking more matching sessions in multiuser mount mode. Pointed out by Shaggy. Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
@@ -1,3 +1,7 @@
|
|||||||
|
Version 1.40
|
||||||
|
------------
|
||||||
|
Use fsuid (fsgid) more consistently instead of uid (gid).
|
||||||
|
|
||||||
Version 1.39
|
Version 1.39
|
||||||
------------
|
------------
|
||||||
Defer close of a file handle slightly if pending writes depend on that handle
|
Defer close of a file handle slightly if pending writes depend on that handle
|
||||||
@@ -7,6 +11,8 @@ Fix SFU style symlinks and mknod needed for servers which do not support the
|
|||||||
CIFS Unix Extensions. Fix setfacl/getfacl on bigendian. Timeout negative
|
CIFS Unix Extensions. Fix setfacl/getfacl on bigendian. Timeout negative
|
||||||
dentries so files that the client sees as deleted but that later get created
|
dentries so files that the client sees as deleted but that later get created
|
||||||
on the server will be recognized. Add client side permission check on setattr.
|
on the server will be recognized. Add client side permission check on setattr.
|
||||||
|
Timeout stuck requests better (where server has never responded or sent corrupt
|
||||||
|
responses)
|
||||||
|
|
||||||
Version 1.38
|
Version 1.38
|
||||||
------------
|
------------
|
||||||
|
@@ -99,5 +99,5 @@ extern ssize_t cifs_getxattr(struct dentry *, const char *, void *, size_t);
|
|||||||
extern ssize_t cifs_listxattr(struct dentry *, char *, size_t);
|
extern ssize_t cifs_listxattr(struct dentry *, char *, size_t);
|
||||||
extern int cifs_ioctl (struct inode * inode, struct file * filep,
|
extern int cifs_ioctl (struct inode * inode, struct file * filep,
|
||||||
unsigned int command, unsigned long arg);
|
unsigned int command, unsigned long arg);
|
||||||
#define CIFS_VERSION "1.39"
|
#define CIFS_VERSION "1.40"
|
||||||
#endif /* _CIFSFS_H */
|
#endif /* _CIFSFS_H */
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* vfs operations that deal with dentries
|
* vfs operations that deal with dentries
|
||||||
*
|
*
|
||||||
* Copyright (C) International Business Machines Corp., 2002,2003
|
* Copyright (C) International Business Machines Corp., 2002,2005
|
||||||
* Author(s): Steve French (sfrench@us.ibm.com)
|
* Author(s): Steve French (sfrench@us.ibm.com)
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or modify
|
* This library is free software; you can redistribute it and/or modify
|
||||||
@@ -200,8 +200,8 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
|
|||||||
(oplock & CIFS_CREATE_ACTION))
|
(oplock & CIFS_CREATE_ACTION))
|
||||||
if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
|
if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
|
||||||
CIFSSMBUnixSetPerms(xid, pTcon, full_path, mode,
|
CIFSSMBUnixSetPerms(xid, pTcon, full_path, mode,
|
||||||
(__u64)current->euid,
|
(__u64)current->fsuid,
|
||||||
(__u64)current->egid,
|
(__u64)current->fsgid,
|
||||||
0 /* dev */,
|
0 /* dev */,
|
||||||
cifs_sb->local_nls,
|
cifs_sb->local_nls,
|
||||||
cifs_sb->mnt_cifs_flags &
|
cifs_sb->mnt_cifs_flags &
|
||||||
@@ -325,7 +325,7 @@ int cifs_mknod(struct inode *inode, struct dentry *direntry, int mode,
|
|||||||
else if (pTcon->ses->capabilities & CAP_UNIX) {
|
else if (pTcon->ses->capabilities & CAP_UNIX) {
|
||||||
if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
|
if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
|
||||||
rc = CIFSSMBUnixSetPerms(xid, pTcon, full_path,
|
rc = CIFSSMBUnixSetPerms(xid, pTcon, full_path,
|
||||||
mode,(__u64)current->euid,(__u64)current->egid,
|
mode,(__u64)current->fsuid,(__u64)current->fsgid,
|
||||||
device_number, cifs_sb->local_nls,
|
device_number, cifs_sb->local_nls,
|
||||||
cifs_sb->mnt_cifs_flags &
|
cifs_sb->mnt_cifs_flags &
|
||||||
CIFS_MOUNT_MAP_SPECIAL_CHR);
|
CIFS_MOUNT_MAP_SPECIAL_CHR);
|
||||||
|
@@ -750,8 +750,8 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode)
|
|||||||
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
|
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
|
||||||
CIFSSMBUnixSetPerms(xid, pTcon, full_path,
|
CIFSSMBUnixSetPerms(xid, pTcon, full_path,
|
||||||
mode,
|
mode,
|
||||||
(__u64)current->euid,
|
(__u64)current->fsuid,
|
||||||
(__u64)current->egid,
|
(__u64)current->fsgid,
|
||||||
0 /* dev_t */,
|
0 /* dev_t */,
|
||||||
cifs_sb->local_nls,
|
cifs_sb->local_nls,
|
||||||
cifs_sb->mnt_cifs_flags &
|
cifs_sb->mnt_cifs_flags &
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* fs/cifs/misc.c
|
* fs/cifs/misc.c
|
||||||
*
|
*
|
||||||
* Copyright (C) International Business Machines Corp., 2002,2004
|
* Copyright (C) International Business Machines Corp., 2002,2005
|
||||||
* Author(s): Steve French (sfrench@us.ibm.com)
|
* Author(s): Steve French (sfrench@us.ibm.com)
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or modify
|
* This library is free software; you can redistribute it and/or modify
|
||||||
@@ -348,12 +348,12 @@ header_assemble(struct smb_hdr *buffer, char smb_command /* command */ ,
|
|||||||
/* BB Add support for establishing new tCon and SMB Session */
|
/* BB Add support for establishing new tCon and SMB Session */
|
||||||
/* with userid/password pairs found on the smb session */
|
/* with userid/password pairs found on the smb session */
|
||||||
/* for other target tcp/ip addresses BB */
|
/* for other target tcp/ip addresses BB */
|
||||||
if(current->uid != treeCon->ses->linux_uid) {
|
if(current->fsuid != treeCon->ses->linux_uid) {
|
||||||
cFYI(1,("Multiuser mode and UID did not match tcon uid "));
|
cFYI(1,("Multiuser mode and UID did not match tcon uid"));
|
||||||
read_lock(&GlobalSMBSeslock);
|
read_lock(&GlobalSMBSeslock);
|
||||||
list_for_each(temp_item, &GlobalSMBSessionList) {
|
list_for_each(temp_item, &GlobalSMBSessionList) {
|
||||||
ses = list_entry(temp_item, struct cifsSesInfo, cifsSessionList);
|
ses = list_entry(temp_item, struct cifsSesInfo, cifsSessionList);
|
||||||
if(ses->linux_uid == current->uid) {
|
if(ses->linux_uid == current->fsuid) {
|
||||||
if(ses->server == treeCon->ses->server) {
|
if(ses->server == treeCon->ses->server) {
|
||||||
cFYI(1,("found matching uid substitute right smb_uid"));
|
cFYI(1,("found matching uid substitute right smb_uid"));
|
||||||
buffer->Uid = ses->Suid;
|
buffer->Uid = ses->Suid;
|
||||||
|
Reference in New Issue
Block a user