Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a750e77c authored by Steve French's avatar Steve French
Browse files

[CIFS] acl support part 4



Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
parent d5d18501
Loading
Loading
Loading
Loading
+10 −9
Original line number Original line Diff line number Diff line
@@ -95,23 +95,24 @@ int match_sid(struct cifs_sid *ctsid)
	return (-1);
	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 compare_sids(struct cifs_sid *ctsid, struct cifs_sid *cwsid)
{
{
	int i;
	int i;
	int num_subauth, num_sat, num_saw;
	int num_subauth, num_sat, num_saw;


	if ((!ctsid) || (!cwsid))
	if ((!ctsid) || (!cwsid))
		return (-1);
		return (0);


	/* compare the revision */
	/* compare the revision */
	if (ctsid->revision != cwsid->revision)
	if (ctsid->revision != cwsid->revision)
		return (-1);
		return (0);


	/* compare all of the six auth values */
	/* compare all of the six auth values */
	for (i = 0; i < 6; ++i) {
	for (i = 0; i < 6; ++i) {
		if (ctsid->authority[i] != cwsid->authority[i])
		if (ctsid->authority[i] != cwsid->authority[i])
			return (-1);
			return (0);
	}
	}


	/* compare all of the subauth values if any */
	/* 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) {
	if (num_subauth) {
		for (i = 0; i < num_subauth; ++i) {
		for (i = 0; i < num_subauth; ++i) {
			if (ctsid->sub_auth[i] != cwsid->sub_auth[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 i;
	int num_aces = 0;
	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 *
		cifscred->aces = kmalloc(num_aces *
			sizeof(struct cifs_ace *), GFP_KERNEL);*/
			sizeof(struct cifs_ace *), GFP_KERNEL);*/



		for (i = 0; i < num_aces; ++i) {
		for (i = 0; i < num_aces; ++i) {
			ppntace[i] = (struct cifs_ntace *)
			ppntace[i] = (struct cifs_ntace *)
					(acl_base + acl_size);
					(acl_base + acl_size);
@@ -317,7 +318,7 @@ int parse_sec_desc(struct cifs_ntsd *pntsd, int acl_len)
	if (rc)
	if (rc)
		return 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->uid = owner_sid_ptr->rid;
	cifscred->gid = group_sid_ptr->rid;
	cifscred->gid = group_sid_ptr->rid;
+9 −0
Original line number Original line Diff line number Diff line
@@ -23,9 +23,18 @@
#define _CIFSACL_H
#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 NUM_WK_SIDS 7 /* number of well known sids */
#define SIDNAMELENGTH 20 /* long enough for the ones we care about */
#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 {
struct cifs_ntsd {
	__le16 revision; /* revision level */
	__le16 revision; /* revision level */
	__le16 type;
	__le16 type;
+6 −0
Original line number Original line Diff line number Diff line
@@ -215,6 +215,12 @@
					 /* file_execute, file_read_attributes*/
					 /* file_execute, file_read_attributes*/
					 /* write_dac, and delete.           */
					 /* 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
 * Invalid readdir handle
 */
 */