[apparmor] [PATCH 04/11] parser: Simplify change_profile grammar rules
John Johansen
john.johansen at canonical.com
Fri May 27 11:56:41 UTC 2016
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 <tyhicks at canonical.com>
Acked-by: John Johansen <john.johansen at canonical.com>
> ---
> 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."));
>
>
More information about the AppArmor
mailing list