]> err.no Git - linux-2.6/blobdiff - fs/cifs/cifsacl.c
[GFS2] Reorganize function gfs2_glmutex_lock
[linux-2.6] / fs / cifs / cifsacl.c
index dabbce00712b0f23e02e5bfe46e5696850791e1f..c312adcba4fc1b0530cba4e869beeca9763c13d3 100644 (file)
@@ -134,9 +134,10 @@ int compare_sids(const struct cifs_sid *ctsid, const struct cifs_sid *cwsid)
    pmode is the existing mode (we only want to overwrite part of this
    bits to set can be: S_IRWXU, S_IRWXG or S_IRWXO ie 00700 or 00070 or 00007
 */
-static void access_flags_to_mode(__u32 ace_flags, int type, umode_t *pmode,
+static void access_flags_to_mode(__le32 ace_flags, int type, umode_t *pmode,
                                 umode_t *pbits_to_set)
 {
+       __u32 flags = le32_to_cpu(ace_flags);
        /* the order of ACEs is important.  The canonical order is to begin with
           DENY entries followed by ALLOW, otherwise an allow entry could be
           encountered first, making the subsequent deny entry like "dead code"
@@ -146,17 +147,17 @@ static void access_flags_to_mode(__u32 ace_flags, int type, umode_t *pmode,
        /* For deny ACEs we change the mask so that subsequent allow access
           control entries do not turn on the bits we are denying */
        if (type == ACCESS_DENIED) {
-               if (ace_flags & GENERIC_ALL) {
+               if (flags & GENERIC_ALL) {
                        *pbits_to_set &= ~S_IRWXUGO;
                }
-               if ((ace_flags & GENERIC_WRITE) ||
-                       ((ace_flags & FILE_WRITE_RIGHTS) == FILE_WRITE_RIGHTS))
+               if ((flags & GENERIC_WRITE) ||
+                       ((flags & FILE_WRITE_RIGHTS) == FILE_WRITE_RIGHTS))
                        *pbits_to_set &= ~S_IWUGO;
-               if ((ace_flags & GENERIC_READ) ||
-                       ((ace_flags & FILE_READ_RIGHTS) == FILE_READ_RIGHTS))
+               if ((flags & GENERIC_READ) ||
+                       ((flags & FILE_READ_RIGHTS) == FILE_READ_RIGHTS))
                        *pbits_to_set &= ~S_IRUGO;
-               if ((ace_flags & GENERIC_EXECUTE) ||
-                       ((ace_flags & FILE_EXEC_RIGHTS) == FILE_EXEC_RIGHTS))
+               if ((flags & GENERIC_EXECUTE) ||
+                       ((flags & FILE_EXEC_RIGHTS) == FILE_EXEC_RIGHTS))
                        *pbits_to_set &= ~S_IXUGO;
                return;
        } else if (type != ACCESS_ALLOWED) {
@@ -165,25 +166,25 @@ static void access_flags_to_mode(__u32 ace_flags, int type, umode_t *pmode,
        }
        /* else ACCESS_ALLOWED type */
 
-       if (ace_flags & GENERIC_ALL) {
+       if (flags & GENERIC_ALL) {
                *pmode |= (S_IRWXUGO & (*pbits_to_set));
 #ifdef CONFIG_CIFS_DEBUG2
                cFYI(1, ("all perms"));
 #endif
                return;
        }
-       if ((ace_flags & GENERIC_WRITE) ||
-                       ((ace_flags & FILE_WRITE_RIGHTS) == FILE_WRITE_RIGHTS))
+       if ((flags & GENERIC_WRITE) ||
+                       ((flags & FILE_WRITE_RIGHTS) == FILE_WRITE_RIGHTS))
                *pmode |= (S_IWUGO & (*pbits_to_set));
-       if ((ace_flags & GENERIC_READ) ||
-                       ((ace_flags & FILE_READ_RIGHTS) == FILE_READ_RIGHTS))
+       if ((flags & GENERIC_READ) ||
+                       ((flags & FILE_READ_RIGHTS) == FILE_READ_RIGHTS))
                *pmode |= (S_IRUGO & (*pbits_to_set));
-       if ((ace_flags & GENERIC_EXECUTE) ||
-                       ((ace_flags & FILE_EXEC_RIGHTS) == FILE_EXEC_RIGHTS))
+       if ((flags & GENERIC_EXECUTE) ||
+                       ((flags & FILE_EXEC_RIGHTS) == FILE_EXEC_RIGHTS))
                *pmode |= (S_IXUGO & (*pbits_to_set));
 
 #ifdef CONFIG_CIFS_DEBUG2
-       cFYI(1, ("access flags 0x%x mode now 0x%x", ace_flags, *pmode));
+       cFYI(1, ("access flags 0x%x mode now 0x%x", flags, *pmode));
 #endif
        return;
 }
@@ -269,6 +270,13 @@ static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl,
 
        /* BB need to add parm so we can store the SID BB */
 
+       if (!pdacl) {
+               /* no DACL in the security descriptor, set
+                  all the permissions for user/group/other */
+               inode->i_mode |= S_IRWXUGO;
+               return;
+       }
+
        /* validate that we do not go past end of acl */
        if (end_of_acl < (char *)pdacl + le16_to_cpu(pdacl->size)) {
                cERROR(1, ("ACL too small to parse DACL"));
@@ -286,12 +294,6 @@ static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl,
           user/group/other have no permissions */
        inode->i_mode &= ~(S_IRWXUGO);
 
-       if (!pdacl) {
-               /* no DACL in the security descriptor, set
-                  all the permissions for user/group/other */
-               inode->i_mode |= S_IRWXUGO;
-               return;
-       }
        acl_base = (char *)pdacl;
        acl_size = sizeof(struct cifs_acl);