diff options
author | Steve French <sfrench@us.ibm.com> | 2007-10-31 00:54:42 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2007-10-31 00:54:42 -0400 |
commit | 953f868138dbf4300196780379476ab9f07f263a (patch) | |
tree | e0dfbaebe02e75094033425fc4274328c5928dd0 /fs/cifs/inode.c | |
parent | e01b64001359034d04c695388870936ed3d1b56b (diff) |
[CIFS] Don't request too much permission when reading an ACL
We were requesting GENERIC_READ but that fails when we do not have
read permission on the file (even if we could read the ACL).
Also move the dump access control entry code into debug ifdef.
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs/inode.c')
-rw-r--r-- | fs/cifs/inode.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index 9be0bbd20dfd..7d907e84e032 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
@@ -289,7 +289,7 @@ static int decode_sfu_inode(struct inode *inode, __u64 size, | |||
289 | 289 | ||
290 | #define SFBITS_MASK (S_ISVTX | S_ISGID | S_ISUID) /* SETFILEBITS valid bits */ | 290 | #define SFBITS_MASK (S_ISVTX | S_ISGID | S_ISUID) /* SETFILEBITS valid bits */ |
291 | 291 | ||
292 | static int get_sfu_uid_mode(struct inode *inode, | 292 | static int get_sfu_mode(struct inode *inode, |
293 | const unsigned char *path, | 293 | const unsigned char *path, |
294 | struct cifs_sb_info *cifs_sb, int xid) | 294 | struct cifs_sb_info *cifs_sb, int xid) |
295 | { | 295 | { |
@@ -528,16 +528,15 @@ int cifs_get_inode_info(struct inode **pinode, | |||
528 | /* BB fill in uid and gid here? with help from winbind? | 528 | /* BB fill in uid and gid here? with help from winbind? |
529 | or retrieve from NTFS stream extended attribute */ | 529 | or retrieve from NTFS stream extended attribute */ |
530 | #ifdef CONFIG_CIFS_EXPERIMENTAL | 530 | #ifdef CONFIG_CIFS_EXPERIMENTAL |
531 | /* fill in 0777 bits from ACL */ | ||
531 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL) { | 532 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL) { |
532 | cFYI(1, ("Getting mode bits from ACL")); | 533 | cFYI(1, ("Getting mode bits from ACL")); |
533 | acl_to_uid_mode(inode, search_path); | 534 | acl_to_uid_mode(inode, search_path); |
534 | } | 535 | } |
535 | #endif | 536 | #endif |
536 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL) { | 537 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL) { |
537 | /* fill in uid, gid, mode from server ACL */ | 538 | /* fill in remaining high mode bits e.g. SUID, VTX */ |
538 | /* BB FIXME this should also take into account the | 539 | get_sfu_mode(inode, search_path, cifs_sb, xid); |
539 | * default uid specified on mount if present */ | ||
540 | get_sfu_uid_mode(inode, search_path, cifs_sb, xid); | ||
541 | } else if (atomic_read(&cifsInfo->inUse) == 0) { | 540 | } else if (atomic_read(&cifsInfo->inUse) == 0) { |
542 | inode->i_uid = cifs_sb->mnt_uid; | 541 | inode->i_uid = cifs_sb->mnt_uid; |
543 | inode->i_gid = cifs_sb->mnt_gid; | 542 | inode->i_gid = cifs_sb->mnt_gid; |