[CIFS] add mode to acl conversion helper function
authorSteve French <sfrench@us.ibm.com>
Thu, 8 Nov 2007 21:12:01 +0000 (21:12 +0000)
committerSteve French <sfrench@us.ibm.com>
Thu, 8 Nov 2007 21:12:01 +0000 (21:12 +0000)
Acked-by: Shirish Pargaonkar <shirishp@us.ibm.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/CHANGES
fs/cifs/cifsacl.c
fs/cifs/cifsfs.h

index 6d3e736612ba261531eee6307d1ea83f753be99d..53629b8bc8a8b58ee74aa8e5cc9eb9e1f8d25778 100644 (file)
@@ -1,3 +1,6 @@
+Version 1.52
+------------
+
 Version 1.51
 ------------
 Fix memory leak in statfs when mounted to very old servers (e.g.
index ec445802d9037e9a366098d6ec13dd96a0705993..dabbce00712b0f23e02e5bfe46e5696850791e1f 100644 (file)
@@ -138,9 +138,9 @@ static void access_flags_to_mode(__u32 ace_flags, int type, umode_t *pmode,
                                 umode_t *pbits_to_set)
 {
        /* the order of ACEs is important.  The canonical order is to begin with
-          DENY entries then follow with ALLOW, otherwise an allow entry could be
+          DENY entries followed by ALLOW, otherwise an allow entry could be
           encountered first, making the subsequent deny entry like "dead code"
-           which would be superflous since Windows stops when a match is made 
+          which would be superflous since Windows stops when a match is made
           for the operation you are trying to perform for your user */
 
        /* For deny ACEs we change the mask so that subsequent allow access
@@ -188,6 +188,37 @@ static void access_flags_to_mode(__u32 ace_flags, int type, umode_t *pmode,
        return;
 }
 
+/*
+   Generate access flags to reflect permissions mode is the existing mode.
+   This function is called for every ACE in the DACL whose SID matches
+   with either owner or group or everyone.
+*/
+
+static void mode_to_access_flags(umode_t mode, umode_t bits_to_use,
+                               __u32 *pace_flags)
+{
+       /* reset access mask */
+       *pace_flags = 0x0;
+
+       /* bits to use are either S_IRWXU or S_IRWXG or S_IRWXO */
+       mode &= bits_to_use;
+
+       /* check for R/W/X UGO since we do not know whose flags
+          is this but we have cleared all the bits sans RWX for
+          either user or group or other as per bits_to_use */
+       if (mode & S_IRUGO)
+               *pace_flags |= SET_FILE_READ_RIGHTS;
+       if (mode & S_IWUGO)
+               *pace_flags |= SET_FILE_WRITE_RIGHTS;
+       if (mode & S_IXUGO)
+               *pace_flags |= SET_FILE_EXEC_RIGHTS;
+
+#ifdef CONFIG_CIFS_DEBUG2
+       cFYI(1, ("mode: 0x%x, access flags now 0x%x", mode, *pace_flags));
+#endif
+       return;
+}
+
 
 #ifdef CONFIG_CIFS_DEBUG2
 static void dump_ace(struct cifs_ace *pace, char *end_of_acl)
index 0a3ee5a322b02a4329c1448dea61713a1c422f24..62357d228c0764ac5c4dbb90f6a11569f1341c0c 100644 (file)
@@ -106,5 +106,5 @@ extern int cifs_ioctl(struct inode *inode, struct file *filep,
 extern struct export_operations cifs_export_ops;
 #endif /* EXPERIMENTAL */
 
-#define CIFS_VERSION   "1.51"
+#define CIFS_VERSION   "1.52"
 #endif                         /* _CIFSFS_H */