[CIFS] acl support part 4
authorSteve French <sfrench@us.ibm.com>
Wed, 17 Oct 2007 22:50:39 +0000 (22:50 +0000)
committerSteve French <sfrench@us.ibm.com>
Wed, 17 Oct 2007 22:50:39 +0000 (22:50 +0000)
Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/cifsacl.c
fs/cifs/cifsacl.h
fs/cifs/cifspdu.h

index c46f26b..ecd6da9 100644 (file)
@@ -95,23 +95,24 @@ int match_sid(struct cifs_sid *ctsid)
        return (-1);
 }
 
-
+/* if the two SIDs (roughly equivalent to a UUID for a user or group) are
+   the same returns 1, if they do not match returns 0 */
 int compare_sids(struct cifs_sid *ctsid, struct cifs_sid *cwsid)
 {
        int i;
        int num_subauth, num_sat, num_saw;
 
        if ((!ctsid) || (!cwsid))
-               return (-1);
+               return (0);
 
        /* compare the revision */
        if (ctsid->revision != cwsid->revision)
-               return (-1);
+               return (0);
 
        /* compare all of the six auth values */
        for (i = 0; i < 6; ++i) {
                if (ctsid->authority[i] != cwsid->authority[i])
-                       return (-1);
+                       return (0);
        }
 
        /* compare all of the subauth values if any */
@@ -121,11 +122,11 @@ int compare_sids(struct cifs_sid *ctsid, struct cifs_sid *cwsid)
        if (num_subauth) {
                for (i = 0; i < num_subauth; ++i) {
                        if (ctsid->sub_auth[i] != cwsid->sub_auth[i])
-                               return (-1);
+                               return (0);
                }
        }
 
-       return (0); /* sids compare/match */
+       return (1); /* sids compare/match */
 }
 
 
@@ -180,7 +181,8 @@ static void parse_ntace(struct cifs_ntace *pntace, char *end_of_acl)
 
 
 
-static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl)
+static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl,
+                      struct cifs_sid *pownersid, struct cifs_sid pgrpsid)
 {
        int i;
        int num_aces = 0;
@@ -219,7 +221,6 @@ static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl)
                cifscred->aces = kmalloc(num_aces *
                        sizeof(struct cifs_ace *), GFP_KERNEL);*/
 
-
                for (i = 0; i < num_aces; ++i) {
                        ppntace[i] = (struct cifs_ntace *)
                                        (acl_base + acl_size);
@@ -317,7 +318,7 @@ int parse_sec_desc(struct cifs_ntsd *pntsd, int acl_len)
        if (rc)
                return rc;
 
-       parse_dacl(dacl_ptr, end_of_acl);
+       parse_dacl(dacl_ptr, end_of_acl, owner_sid_ptr, group_sid_ptr);
 
 /*     cifscred->uid = owner_sid_ptr->rid;
        cifscred->gid = group_sid_ptr->rid;
index fa01053..420f878 100644 (file)
 #define _CIFSACL_H
 
 
+#define NUM_AUTHS 6 /* number of authority fields */
+#define NUM_SUBAUTHS 5 /* number of sub authority fields */
 #define NUM_WK_SIDS 7 /* number of well known sids */
 #define SIDNAMELENGTH 20 /* long enough for the ones we care about */
 
+#define READ_BIT        0x4
+#define WRITE_BIT       0x2
+#define EXEC_BIT        0x1
+
+#define UBITSHIFT      6
+#define GBITSHIFT      3
+
 struct cifs_ntsd {
        __le16 revision; /* revision level */
        __le16 type;
index d2f0cf2..c41ff74 100644 (file)
                                         /* file_execute, file_read_attributes*/
                                         /* write_dac, and delete.           */
 
+#define FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA | FILE_READ_ATTRIBUTES)
+#define FILE_WRITE_RIGHTS (FILE_WRITE_DATA | FILE_APPEND_DATA \
+                               | FILE_WRITE_EA | FILE_WRITE_ATTRIBUTES)
+#define FILE_EXEC_RIGHTS (FILE_EXECUTE)
+
+
 /*
  * Invalid readdir handle
  */