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

Commit 4879b448 authored by Steve French's avatar Steve French
Browse files

[CIFS] ACL support part 5

parent c4ec2071
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -129,6 +129,29 @@ int compare_sids(struct cifs_sid *ctsid, struct cifs_sid *cwsid)
	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)
{
+1 −1
Original line number Diff line number Diff line
@@ -92,7 +92,7 @@ extern int cifs_get_inode_info(struct inode **pinode,
extern int cifs_get_inode_info_unix(struct inode **pinode,
			const unsigned char *search_path,
			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 *,
			const char *);
extern int cifs_umount(struct super_block *, struct cifs_sb_info *);
+6 −0
Original line number Diff line number Diff line
@@ -527,6 +527,12 @@ int cifs_get_inode_info(struct inode **pinode,

		/* BB fill in uid and gid here? with help from winbind?
		   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) {
			/* fill in uid, gid, mode from server ACL */
			/* BB FIXME this should also take into account the