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]> --- 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.")); -- 2.7.4 -- AppArmor mailing list [email protected] Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor
