On 08/20/2014 01:11 AM, Steve Beattie wrote:
> On Fri, Aug 15, 2014 at 12:20:44PM -0700, [email protected] wrote:
>> The shared node type will be used in the future to add new capabilities
>>
>> Signed-off-by: John Johansen <[email protected]>
>>
>> === 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.
> 
Indeed I stole this code from the alias rework, where we pickup new node
types to handle alias rewriting

> Without the is_postprocess() bits, Acked-by: Steve Beattie <[email protected]>
> 
>>  /* 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
>> [email protected]
>> Modify settings or unsubscribe at: 
>> https://lists.ubuntu.com/mailman/listinfo/apparmor
> 
> 
> 


-- 
AppArmor mailing list
[email protected]
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/apparmor

Reply via email to