[apparmor] [patch 09/12] Refactor accept nodes to be common to a shared node type
Steve Beattie
steve at nxnw.org
Wed Aug 20 08:11:31 UTC 2014
On Fri, Aug 15, 2014 at 12:20:44PM -0700, john.johansen at canonical.com wrote:
> The shared node type will be used in the future to add new capabilities
>
> Signed-off-by: John Johansen <john.johansen at canonical.com>
>
> === modified file 'parser/libapparmor_re/expr-tree.h'
> ---
> parser/libapparmor_re/expr-tree.h | 99 +++++++++++++++++++-------------------
> 1 file changed, 51 insertions(+), 48 deletions(-)
>
> --- parser/libapparmor_re/expr-tree.h.orig
> +++ parser/libapparmor_re/expr-tree.h
> @@ -216,6 +216,7 @@
> void compute_lastpos() { lastpos.insert(this); }
> virtual void follow(Cases &cases) = 0;
> virtual int is_accept(void) = 0;
> + virtual int is_postprocess(void) = 0;
> };
>
> /* common base class for all the different classes that contain
> @@ -225,6 +226,7 @@
> public:
> CNode(): ImportantNode() { }
> int is_accept(void) { return false; }
> + int is_postprocess(void) { return false; }
> };
>
All the class reorganization I think looks okay, I just don't get the
addition of the is_postprocess() methods that only return false (here
and in the AcceptNode() class. Is this a future change that leaked in,
because I don't see anything that references it later in the patch set.
Without the is_postprocess() bits, Acked-by: Steve Beattie <steve at nxnw.org>
> /* Match one specific character (/c/). */
> @@ -369,35 +371,6 @@
> ostream &dump(ostream &os) { return os << "."; }
> };
>
> -/**
> - * Indicate that a regular expression matches. An AcceptNode itself
> - * doesn't match anything, so it will never generate any transitions.
> - */
> -class AcceptNode: public ImportantNode {
> -public:
> - AcceptNode() { }
> - int is_accept(void) { return true; }
> - void release(void)
> - {
> - /* don't delete AcceptNode via release as they are shared, and
> - * will be deleted when the table the are stored in is deleted
> - */
> - }
> -
> - void follow(Cases &cases __attribute__ ((unused)))
> - {
> - /* Nothing to follow. */
> - }
> -
> - /* requires accept nodes to be common by pointer */
> - int eq(Node *other)
> - {
> - if (dynamic_cast<AcceptNode *>(other))
> - return (this == other);
> - return 0;
> - }
> -};
> -
> /* Match a node zero or more times. (This is a unary operator.) */
> class StarNode: public OneChildNode {
> public:
> @@ -536,6 +509,55 @@
> void normalize(int dir);
> };
>
> +class SharedNode: public ImportantNode {
> +public:
> + SharedNode() { }
> + void release(void)
> + {
> + /* don't delete SharedNodes via release as they are shared, and
> + * will be deleted when the table they are stored in is deleted
> + */
> + }
> +
> + void follow(Cases &cases __attribute__ ((unused)))
> + {
> + /* Nothing to follow. */
> + }
> +
> + /* requires shared nodes to be common by pointer */
> + int eq(Node *other) { return (this == other); }
> +};
> +
> +/**
> + * Indicate that a regular expression matches. An AcceptNode itself
> + * doesn't match anything, so it will never generate any transitions.
> + */
> +class AcceptNode: public SharedNode {
> +public:
> + AcceptNode() { }
> + int is_accept(void) { return true; }
> + int is_postprocess(void) { return false; }
> +};
> +
> +class MatchFlag: public AcceptNode {
> +public:
> + MatchFlag(uint32_t flag, uint32_t audit): flag(flag), audit(audit) { }
> + ostream &dump(ostream &os) { return os << "< 0x" << hex << flag << '>'; }
> +
> + uint32_t flag;
> + uint32_t audit;
> +};
> +
> +class ExactMatchFlag: public MatchFlag {
> +public:
> + ExactMatchFlag(uint32_t flag, uint32_t audit): MatchFlag(flag, audit) {}
> +};
> +
> +class DenyMatchFlag: public MatchFlag {
> +public:
> + DenyMatchFlag(uint32_t flag, uint32_t quiet): MatchFlag(flag, quiet) {}
> +};
> +
> /* Traverse the syntax tree depth-first in an iterator-like manner. */
> class depth_first_traversal {
> stack<Node *>pos;
> @@ -588,25 +610,6 @@
> void flip_tree(Node *node);
>
>
> -class MatchFlag: public AcceptNode {
> -public:
> - MatchFlag(uint32_t flag, uint32_t audit): flag(flag), audit(audit) { }
> - ostream &dump(ostream &os) { return os << "< 0x" << hex << flag << '>'; }
> -
> - uint32_t flag;
> - uint32_t audit;
> -};
> -
> -class ExactMatchFlag: public MatchFlag {
> -public:
> - ExactMatchFlag(uint32_t flag, uint32_t audit): MatchFlag(flag, audit) {}
> -};
> -
> -class DenyMatchFlag: public MatchFlag {
> -public:
> - DenyMatchFlag(uint32_t flag, uint32_t quiet): MatchFlag(flag, quiet) {}
> -};
> -
>
> /*
> * hashedNodes - for efficient set comparison
>
>
> --
> AppArmor mailing list
> AppArmor at lists.ubuntu.com
> Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor
--
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/20140820/923c0d6b/attachment.pgp>
More information about the AppArmor
mailing list