浏览代码

[CIFS] ACL support part 5

Acked-by: Shirish Pargaonkar <shirishp@us.ibm.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Steve French 17 年之前
父节点
当前提交
4879b44829
共有 3 个文件被更改,包括 30 次插入1 次删除
  1. 23 0
      fs/cifs/cifsacl.c
  2. 1 1
      fs/cifs/cifsproto.h
  3. 6 0
      fs/cifs/inode.c

+ 23 - 0
fs/cifs/cifsacl.c

@@ -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
fs/cifs/cifsproto.h

@@ -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
fs/cifs/inode.c

@@ -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