diff options
Diffstat (limited to 'fs/cifs/cifsacl.c')
| -rw-r--r-- | fs/cifs/cifsacl.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/fs/cifs/cifsacl.c b/fs/cifs/cifsacl.c index c46f26bcd8b2..ecd6da9e9d38 100644 --- a/fs/cifs/cifsacl.c +++ b/fs/cifs/cifsacl.c | |||
| @@ -95,23 +95,24 @@ int match_sid(struct cifs_sid *ctsid) | |||
| 95 | return (-1); | 95 | return (-1); |
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | 98 | /* if the two SIDs (roughly equivalent to a UUID for a user or group) are | |
| 99 | the same returns 1, if they do not match returns 0 */ | ||
| 99 | int compare_sids(struct cifs_sid *ctsid, struct cifs_sid *cwsid) | 100 | int compare_sids(struct cifs_sid *ctsid, struct cifs_sid *cwsid) |
| 100 | { | 101 | { |
| 101 | int i; | 102 | int i; |
| 102 | int num_subauth, num_sat, num_saw; | 103 | int num_subauth, num_sat, num_saw; |
| 103 | 104 | ||
| 104 | if ((!ctsid) || (!cwsid)) | 105 | if ((!ctsid) || (!cwsid)) |
| 105 | return (-1); | 106 | return (0); |
| 106 | 107 | ||
| 107 | /* compare the revision */ | 108 | /* compare the revision */ |
| 108 | if (ctsid->revision != cwsid->revision) | 109 | if (ctsid->revision != cwsid->revision) |
| 109 | return (-1); | 110 | return (0); |
| 110 | 111 | ||
| 111 | /* compare all of the six auth values */ | 112 | /* compare all of the six auth values */ |
| 112 | for (i = 0; i < 6; ++i) { | 113 | for (i = 0; i < 6; ++i) { |
| 113 | if (ctsid->authority[i] != cwsid->authority[i]) | 114 | if (ctsid->authority[i] != cwsid->authority[i]) |
| 114 | return (-1); | 115 | return (0); |
| 115 | } | 116 | } |
| 116 | 117 | ||
| 117 | /* compare all of the subauth values if any */ | 118 | /* compare all of the subauth values if any */ |
| @@ -121,11 +122,11 @@ int compare_sids(struct cifs_sid *ctsid, struct cifs_sid *cwsid) | |||
| 121 | if (num_subauth) { | 122 | if (num_subauth) { |
| 122 | for (i = 0; i < num_subauth; ++i) { | 123 | for (i = 0; i < num_subauth; ++i) { |
| 123 | if (ctsid->sub_auth[i] != cwsid->sub_auth[i]) | 124 | if (ctsid->sub_auth[i] != cwsid->sub_auth[i]) |
| 124 | return (-1); | 125 | return (0); |
| 125 | } | 126 | } |
| 126 | } | 127 | } |
| 127 | 128 | ||
| 128 | return (0); /* sids compare/match */ | 129 | return (1); /* sids compare/match */ |
| 129 | } | 130 | } |
| 130 | 131 | ||
| 131 | 132 | ||
| @@ -180,7 +181,8 @@ static void parse_ntace(struct cifs_ntace *pntace, char *end_of_acl) | |||
| 180 | 181 | ||
| 181 | 182 | ||
| 182 | 183 | ||
| 183 | static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl) | 184 | static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl, |
| 185 | struct cifs_sid *pownersid, struct cifs_sid pgrpsid) | ||
| 184 | { | 186 | { |
| 185 | int i; | 187 | int i; |
| 186 | int num_aces = 0; | 188 | int num_aces = 0; |
| @@ -219,7 +221,6 @@ static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl) | |||
| 219 | cifscred->aces = kmalloc(num_aces * | 221 | cifscred->aces = kmalloc(num_aces * |
| 220 | sizeof(struct cifs_ace *), GFP_KERNEL);*/ | 222 | sizeof(struct cifs_ace *), GFP_KERNEL);*/ |
| 221 | 223 | ||
| 222 | |||
| 223 | for (i = 0; i < num_aces; ++i) { | 224 | for (i = 0; i < num_aces; ++i) { |
| 224 | ppntace[i] = (struct cifs_ntace *) | 225 | ppntace[i] = (struct cifs_ntace *) |
| 225 | (acl_base + acl_size); | 226 | (acl_base + acl_size); |
| @@ -317,7 +318,7 @@ int parse_sec_desc(struct cifs_ntsd *pntsd, int acl_len) | |||
| 317 | if (rc) | 318 | if (rc) |
| 318 | return rc; | 319 | return rc; |
| 319 | 320 | ||
| 320 | parse_dacl(dacl_ptr, end_of_acl); | 321 | parse_dacl(dacl_ptr, end_of_acl, owner_sid_ptr, group_sid_ptr); |
| 321 | 322 | ||
| 322 | /* cifscred->uid = owner_sid_ptr->rid; | 323 | /* cifscred->uid = owner_sid_ptr->rid; |
| 323 | cifscred->gid = group_sid_ptr->rid; | 324 | cifscred->gid = group_sid_ptr->rid; |
