diff options
Diffstat (limited to 'fs/cifs/cifsacl.c')
| -rw-r--r-- | fs/cifs/cifsacl.c | 13 | 
1 files changed, 11 insertions, 2 deletions
diff --git a/fs/cifs/cifsacl.c b/fs/cifs/cifsacl.c index a437ec391a0..1e7636b145a 100644 --- a/fs/cifs/cifsacl.c +++ b/fs/cifs/cifsacl.c @@ -41,9 +41,12 @@ static struct cifs_wksid wksidarr[NUM_WK_SIDS] = {  ; -/* security id for everyone */ +/* security id for everyone/world system group */  static const struct cifs_sid sid_everyone = {  	1, 1, {0, 0, 0, 0, 0, 1}, {0} }; +/* security id for Authenticated Users system group */ +static const struct cifs_sid sid_authusers = { +	1, 1, {0, 0, 0, 0, 0, 5}, {11} };  /* group users */  static const struct cifs_sid sid_user = {1, 2 , {0, 0, 0, 0, 0, 5}, {} }; @@ -365,7 +368,7 @@ static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl,  	if (num_aces  > 0) {  		umode_t user_mask = S_IRWXU;  		umode_t group_mask = S_IRWXG; -		umode_t other_mask = S_IRWXO; +		umode_t other_mask = S_IRWXU | S_IRWXG | S_IRWXO;  		ppace = kmalloc(num_aces * sizeof(struct cifs_ace *),  				GFP_KERNEL); @@ -390,6 +393,12 @@ static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl,  						     ppace[i]->type,  						     &fattr->cf_mode,  						     &other_mask); +			if (compare_sids(&(ppace[i]->sid), &sid_authusers)) +				access_flags_to_mode(ppace[i]->access_req, +						     ppace[i]->type, +						     &fattr->cf_mode, +						     &other_mask); +  /*			memcpy((void *)(&(cifscred->aces[i])),  				(void *)ppace[i],  |