[apparmor] [PATCH 04/13] Instead of using a special flags= token and keyword use TOK_CONDID
Kees Cook
kees at ubuntu.com
Tue Feb 14 19:10:56 UTC 2012
Hi John,
On Tue, Feb 14, 2012 at 09:32:26AM -0800, John Johansen wrote:
> Signed-off-by: John Johansen <john.johansen at canonical.com>
> ---
> parser/parser_lex.l | 31 +++++++++++++------------------
> parser/parser_yacc.y | 8 +++++++-
> 2 files changed, 20 insertions(+), 19 deletions(-)
>
> diff --git a/parser/parser_lex.l b/parser/parser_lex.l
> index bfcbd57..8f549c8 100644
> --- a/parser/parser_lex.l
> +++ b/parser/parser_lex.l
> @@ -192,7 +192,6 @@ QUOTED_ID \"{ALLOWED_QUOTED_ID}*\"
>
> IP {NUMBER}\.{NUMBER}\.{NUMBER}\.{NUMBER}
>
> -FLAGS flags{WS}*=?{WS}*
> HAT hat{WS}*
> PROFILE profile{WS}*
> KEYWORD [[:alpha:]_]+
> @@ -254,6 +253,19 @@ LT_EQUAL <=
> if ( !YY_CURRENT_BUFFER ) yyterminate();
> }
>
> +{VARIABLE_NAME}/{WS}*={WS}* {
> + /* we match to the = in the lexer so that
> + * can switch scanner state. By the time
> + * the parser see the = it may be to late
> + * as bison may have requested the next
> + * token from the scanner
> + */
> + PDEBUG("conditional %s=\n", yytext);
> + yylval.id = processid(yytext, yyleng);
> + yy_push_state(EXTCOND_MODE);
> + return TOK_CONDID;
> + }
> +
Why the relocation of this chunk? Seems better to keep it near the other
VARIABLE_NAME use...
> <SUB_NAME>{
> ({IDS}|{QUOTED_ID}) {
> /* Ugh, this is a gross hack. I used to use
> @@ -535,11 +547,6 @@ LT_EQUAL <=
> return TOK_MODE;
> }
>
> -{FLAGS} {
> - DUMP_PREPROCESS;
> - return TOK_FLAGS;
> - }
> -
> {HAT} {
> DUMP_PREPROCESS;
> yy_push_state(SUB_NAME);
> @@ -565,18 +572,6 @@ LT_EQUAL <=
> return TOK_OPENPAREN;
> }
>
> -{VARIABLE_NAME}/{WS}*={WS}* {
> - /* we match to the = in the lexer so that
> - * can switch scanner state. By the time
> - * the parser see the = it may be to late
> - * as bison may have requested the next
> - * token from the scanner
> - */
> - yylval.id = processid(yytext, yyleng);
> - yy_push_state(EXTCOND_MODE);
> - return TOK_CONDID;
> - }
> -
> {VARIABLE_NAME} {
> DUMP_PREPROCESS;
> int token = get_keyword_token(yytext);
> diff --git a/parser/parser_yacc.y b/parser/parser_yacc.y
> index 516cf57..af56a20 100644
> --- a/parser/parser_yacc.y
> +++ b/parser/parser_yacc.y
> @@ -162,6 +162,7 @@ void add_local_entry(struct codomain *cod);
> }
>
> %type <id> TOK_ID
> +%type <id> TOK_CONDID
> %type <mode> TOK_MODE
> %type <fmode> file_mode
> %type <cod> profile_base
> @@ -398,7 +399,12 @@ flags: { /* nothing */
> };
>
> opt_flags: { /* nothing */ $$ = 0; }
> - | TOK_FLAGS { $$ = 1; }
> + | TOK_CONDID TOK_EQUALS
> + {
> + if (strcmp($1, "flags") != 0)
> + yyerror("expected flags= got %s=", $1);
> + $$ = 1;
> + }
>
> flags: opt_flags TOK_OPENPAREN flagvals TOK_CLOSEPAREN
> {
> --
> 1.7.9
>
>
> --
> AppArmor mailing list
> AppArmor at lists.ubuntu.com
> Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor
--
Kees Cook
More information about the AppArmor
mailing list