Loading fs/cifs/cifsacl.c +10 −9 Original line number Original line Diff line number Diff line Loading @@ -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 */ Loading @@ -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 */ } } Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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; Loading fs/cifs/cifsacl.h +9 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading fs/cifs/cifspdu.h +6 −0 Original line number Original line Diff line number Diff line Loading @@ -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 */ */ Loading Loading
fs/cifs/cifsacl.c +10 −9 Original line number Original line Diff line number Diff line Loading @@ -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 */ Loading @@ -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 */ } } Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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; Loading
fs/cifs/cifsacl.h +9 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading
fs/cifs/cifspdu.h +6 −0 Original line number Original line Diff line number Diff line Loading @@ -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 */ */ Loading