forked from Minki/linux
[CIFS] ACL support part 5
Acked-by: Shirish Pargaonkar <shirishp@us.ibm.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
c4ec207173
commit
4879b44829
@ -129,6 +129,29 @@ int compare_sids(struct cifs_sid *ctsid, struct cifs_sid *cwsid)
|
|||||||
return (1); /* sids compare/match */
|
return (1); /* sids compare/match */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_mode_from_acl(struct inode * inode, const char * path)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (inode == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* find an open readable handle
|
||||||
|
if handle found
|
||||||
|
lock handle
|
||||||
|
else open file
|
||||||
|
if no open file can not hurt to check if path is null
|
||||||
|
GetCIFSACL
|
||||||
|
for all ACEs in ACL {
|
||||||
|
if U or G or O
|
||||||
|
inode->i_mode = parse_ace(file_type, UG or O, ace->perms, inode->i_mode)
|
||||||
|
else continue
|
||||||
|
}
|
||||||
|
if handle open close it
|
||||||
|
else unlock handle */
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void parse_ace(struct cifs_ace *pace, char *end_of_acl)
|
static void parse_ace(struct cifs_ace *pace, char *end_of_acl)
|
||||||
{
|
{
|
||||||
|
@ -92,7 +92,7 @@ extern int cifs_get_inode_info(struct inode **pinode,
|
|||||||
extern int cifs_get_inode_info_unix(struct inode **pinode,
|
extern int cifs_get_inode_info_unix(struct inode **pinode,
|
||||||
const unsigned char *search_path,
|
const unsigned char *search_path,
|
||||||
struct super_block *sb, int xid);
|
struct super_block *sb, int xid);
|
||||||
|
extern void get_mode_from_acl(struct inode * inode, const char * search_path);
|
||||||
extern int cifs_mount(struct super_block *, struct cifs_sb_info *, char *,
|
extern int cifs_mount(struct super_block *, struct cifs_sb_info *, char *,
|
||||||
const char *);
|
const char *);
|
||||||
extern int cifs_umount(struct super_block *, struct cifs_sb_info *);
|
extern int cifs_umount(struct super_block *, struct cifs_sb_info *);
|
||||||
|
@ -527,6 +527,12 @@ int cifs_get_inode_info(struct inode **pinode,
|
|||||||
|
|
||||||
/* BB fill in uid and gid here? with help from winbind?
|
/* BB fill in uid and gid here? with help from winbind?
|
||||||
or retrieve from NTFS stream extended attribute */
|
or retrieve from NTFS stream extended attribute */
|
||||||
|
#ifdef CONFIG_CIFS_EXPERIMENTAL
|
||||||
|
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL) {
|
||||||
|
cFYI(1, ("Getting mode bits from ACL"));
|
||||||
|
get_mode_from_acl(inode, search_path);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL) {
|
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL) {
|
||||||
/* fill in uid, gid, mode from server ACL */
|
/* fill in uid, gid, mode from server ACL */
|
||||||
/* BB FIXME this should also take into account the
|
/* BB FIXME this should also take into account the
|
||||||
|
Loading…
Reference in New Issue
Block a user