On 05/25/2016 01:59 PM, Tyler Hicks wrote:
> Make future modifications to the change_profile grammar rules easier by
> simplifying things. First, the change_profile rule handling is collapsed
> into a single grammar rule. The inputs to the grammar rule are given
> helpful variable names to make it harder to mix up which variable we're
> dealing with. Finally, the two separate calls to new_entry() are unified
> into a single call.
> 
> Signed-off-by: Tyler Hicks <[email protected]>

Acked-by: John Johansen <[email protected]>

> ---
>  parser/parser_yacc.y | 30 +++++++++++++-----------------
>  1 file changed, 13 insertions(+), 17 deletions(-)
> 
> diff --git a/parser/parser_yacc.y b/parser/parser_yacc.y
> index 2d95066..91c6d68 100644
> --- a/parser/parser_yacc.y
> +++ b/parser/parser_yacc.y
> @@ -241,7 +241,6 @@ void add_local_entry(Profile *prof);
>  %type <flags>        flagval
>  %type <cap>  caps
>  %type <cap>  capability
> -%type <id>   change_profile_head
>  %type <user_entry> change_profile
>  %type <set_var> TOK_SET_VAR
>  %type <bool_var> TOK_BOOL_VAR
> @@ -1475,28 +1474,25 @@ file_mode: TOK_MODE
>               free($1);
>       }
>  
> -change_profile_head: TOK_CHANGE_PROFILE opt_id
> -     {
> -             if ($2 && !($2[0] == '/' || strncmp($2, "@{", 2) == 0))
> -                     yyerror(_("Exec condition must begin with '/'."));
> -             $$ = $2;
> -     }
> -
> -change_profile: change_profile_head opt_named_transition TOK_END_OF_RULE
> +change_profile: TOK_CHANGE_PROFILE opt_id opt_named_transition 
> TOK_END_OF_RULE
>       {
>               struct cod_entry *entry;
> +             char *exec = $2;
> +             char *target = $3;
>  
> -             if ($2) {
> -                     PDEBUG("Matched change_profile: tok_id (%s)\n", $2);
> -                     entry = new_entry($2, AA_CHANGE_PROFILE, $1);
> -             } else {
> -                     char *rule = strdup("**");
> -                     if (!rule)
> -                             yyerror(_("Memory allocation error."));
> +             if (exec && !(exec[0] == '/' || strncmp(exec, "@{", 2) == 0))
> +                     yyerror(_("Exec condition must begin with '/'."));
>  
> +             if (target) {
> +                     PDEBUG("Matched change_profile: tok_id (%s)\n", target);
> +             } else {
>                       PDEBUG("Matched change_profile,\n");
> -                     entry = new_entry(rule, AA_CHANGE_PROFILE, $1);
> +                     target = strdup("**");
> +                     if (!target)
> +                             yyerror(_("Memory allocation error."));
>               }
> +
> +             entry = new_entry(target, AA_CHANGE_PROFILE, exec);
>               if (!entry)
>                       yyerror(_("Memory allocation error."));
>  
> 


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

Reply via email to