[apparmor] [patch] rule class - split out common parts from is_covered()

Steve Beattie steve at nxnw.org
Thu Jan 15 23:33:44 UTC 2015


On Thu, Jan 15, 2015 at 01:58:58PM +0100, Christian Boltz wrote:
> Am Dienstag, 13. Januar 2015 schrieb Steve Beattie:
> > On Fri, Dec 19, 2014 at 12:24:02AM +0100, Christian Boltz wrote:
> > > this patch splits is_covered() in capability.py into
> > > - is_covered_localparts() for rule-specific code
> > > - is_covered() for common code - located in __init__.py
> > 
> > I'm not keen on the naming convention xxxxx_localvars() that the code
> > actually uses, the xxxxx_localparts() listed above is makes me cringe
> > slightly less.
> 
> Those (internal) function names are just technical details - I can 
> easily change that to ..._localparts().

Yeah, I know. Anyway, I've voiced a slight preference, but don't have a
strong opinion, so I'll leave it up to you.

> > > +        if check_audit and other_rule.audit != self.audit:
> > > +            return False
> > > +
> > > +        if other_rule.audit and not self.audit:
> > > +            return False
> > 
> > I recognize that you are merely pushing these checks around, but do
> > you recall why we do the second audit test after the first? I don't
> > quite get the reasoning...
> 
> if check_audit and other_rule.audit != self.audit:
>     exact check if audit flags are equal, so you get exactly the same 
>     rule and exactly the same logging. Only checked if the check_audit
>     flag is given.
> 
> if other_rule.audit and not self.audit:
>     released check - only hits if other_rule has audit flag set to make 
>     sure we get audit entries in the log - but also "says" things like
>     "foo is covered by audit foo".

Ah right. Thanks.

> > > +
> > > +        # still here? -> then the common part is covered, check
> > > rule-specific things now +        return
> > > self.is_covered_localvars(other_rule, check_allow_deny,
> > > check_audit) +
> > > +    # @abstractmethod  FIXME - uncomment when python3 only
> > 
> > > +    def is_covered_localvars(self, other_rule, 
> check_allow_deny=True, check_audit=False):
> > If check_allow_deny and check_audit are verified in the BaseRule
> > method, is there a reason to pass them on to the subclass version of
> > the method, since they should be irrelevant to them?
> 
> Good question, in theory they are really superfluous.
> 
> My reason for handing them over is to have the same set of parameters in 
> the parent and child function.

I think I prefer to keep the division of responsibilities explicit, by
dropping the arguments for the "child" method. If the subclass really
needs to examine allow/deny/audit to determine coverage, then I either
we can revisit this decision to pass the arguments along or the subclass
can override the is_covered() method.

With that change, and your choice on the _localxxxx name,
Acked-by: Steve Beattie <steve at nxnw.org>. Thanks.

-- 
Steve Beattie
<sbeattie at ubuntu.com>
http://NxNW.org/~steve/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20150115/09b6b1d1/attachment.pgp>


More information about the AppArmor mailing list