Re: [RFC v7 14/41] richacl: Create-time inheritance
From: Andreas Gruenbacher <hidden>
Date: 2015-09-21 20:37:25
Also in:
linux-cifs, linux-fsdevel, linux-nfs, lkml
2015-09-18 19:58 GMT+02:00 J. Bruce Fields [off-list ref]:
On Sat, Sep 05, 2015 at 12:27:09PM +0200, Andreas Gruenbacher wrote:quoted
+ if (dir_ace->e_flags & RICHACE_NO_PROPAGATE_INHERIT_ACE) + ace->e_flags &= ~RICHACE_INHERITANCE_FLAGS; + else if ((dir_ace->e_flags & RICHACE_FILE_INHERIT_ACE) && + !(dir_ace->e_flags & RICHACE_DIRECTORY_INHERIT_ACE))The FILE_INHERIT_ACE check there is redundant since we already know dir_ace is inheritable. (So, OK, it isn't wrong to check it again but let's not make this condition any more complicated than necessary.)
Indeed, we can turn it into:
if (dir_ace->e_flags & RICHACE_NO_PROPAGATE_INHERIT_ACE)
ace->e_flags &= ~RICHACE_INHERITANCE_FLAGS;
else if (!(dir_ace->e_flags & RICHACE_DIRECTORY_INHERIT_ACE))
ace->e_flags |= RICHACE_INHERIT_ONLY_ACE;
quoted
+static struct richacl * +richacl_inherit_inode(const struct richacl *dir_acl, struct inode *inode) +{ + struct richacl *acl; + mode_t mask; + + acl = richacl_inherit(dir_acl, S_ISDIR(inode->i_mode)); + if (acl) { + mask = inode->i_mode; + if (richacl_equiv_mode(acl, &mask) == 0) { + richacl_put(acl); + acl = NULL;Why is it correct to ignore entirely the inherited acl in this case? Oh, I see, I'm forgetting that richacl_equiv_mode is setting the mask, which will get applied at the end of this function. In my defense, maybe it's easy to overlook a side effect in an if condition.... But I don't have a better idea. OK.
Yes. I'll leave that as it is.
So, nits aside:
Reviewed-by: J. Bruce Fields [off-list ref]Thanks, Andreas