[CIFS] acl support part 4

Signed-off-by: Steve French <sfrench@us.ibm.com>
diff --git a/fs/cifs/cifsacl.c b/fs/cifs/cifsacl.c
index c46f26b..ecd6da9 100644
--- a/fs/cifs/cifsacl.c
+++ b/fs/cifs/cifsacl.c
@@ -95,23 +95,24 @@
 	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 @@
 	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_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 @@
 		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 @@
 	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;
diff --git a/fs/cifs/cifsacl.h b/fs/cifs/cifsacl.h
index fa01053..420f878 100644
--- a/fs/cifs/cifsacl.h
+++ b/fs/cifs/cifsacl.h
@@ -23,9 +23,18 @@
 #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;
diff --git a/fs/cifs/cifspdu.h b/fs/cifs/cifspdu.h
index d2f0cf2..c41ff74 100644
--- a/fs/cifs/cifspdu.h
+++ b/fs/cifs/cifspdu.h
@@ -215,6 +215,12 @@
 					 /* 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
  */