Re: [RFC v7 10/41] richacl: Permission check algorithm
From: J. Bruce Fields <hidden>
Date: 2015-09-17 17:30:51
Also in:
linux-cifs, linux-fsdevel, linux-nfs, lkml
On Sat, Sep 12, 2015 at 12:12:16AM +0200, Andreas Grünbacher wrote:
2015-09-11 23:16 GMT+02:00 J. Bruce Fields [off-list ref]:quoted
On Sat, Sep 05, 2015 at 12:27:05PM +0200, Andreas Gruenbacher wrote:quoted
+ /* + * Apply the group file mask to entries other than owner@ and + * everyone@ or user entries matching the owner. This ensures + * that we grant the same permissions as the acl computed by + * richacl_apply_masks(). + * + * Without this restriction, the following richacl would grant + * rw access to processes which are both the owner and in the + * owning group, but not to other users in the owning group, + * which could not be represented without masks: + * + * owner:rw::mask + * group@:rw::allow + */ + if ((acl->a_flags & RICHACL_MASKED) && richace_is_allow(ace)) + ace_mask &= acl->a_group_mask;I'm having trouble understanding this. I think the problem is that I don't really understand the notation in your example. Is a_group_mask zero in that example? I think it must be, in which case, OK I think I get it.Yes. I'm not sure if the example becomes easier to understand when the empty group mask and perhaps also the other mask is included.
I think it would have been for me. In general I find it confusing to present the mask bits as additional ACEs--they're really pretty different.
quoted
(Though I still have to think about it a little more to convince myself that richacl_apply_masks() always gets the same result.)I have tried to break the algorithm into digestible pieces. Do you see another way to make things easier to understand?
I just haven't reread those carefully enough yet, working on it.... --b.